传送门

题目大意

给一颗n个点的树,求树的直径(最长的一条链)

题解

先随便找一个点u,dfs出离它最远的点v

于是有以下情况:

  • 直径就是这条链
  • 直径经过u,是这条链的延长
  • 直径不经过u

只需要从v再进行一边dfs,便可以求出直径。

code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std; int n, m;
int adj[50005], nxt[100005], go[100005], len[100005], ecnt;
long long dist[50005]; inline void addEdge(int u, int v, int w){
nxt[++ecnt] = adj[u], adj[u] = ecnt, go[ecnt] = v, len[ecnt] = w;
nxt[++ecnt] = adj[v], adj[v] = ecnt, go[ecnt] = u, len[ecnt] = w;
} inline void dfs(int u, int f){
for(int e = adj[u]; e; e = nxt[e]){
int v = go[e];
if(v == f) continue;
dist[v] = dist[u] + len[e];
dfs(v, u);
}
} int main(){
freopen("h.in", "r", stdin);
while(~scanf("%d%d", &n, &m)){
ecnt = 0;
memset(adj, 0, sizeof adj);
for(int i = 1; i <= m; i++){
int u, v, w; char ch;
scanf("%d %d %d %c", &u, &v, &w, &ch);
addEdge(u, v, w);
}
int v; long long ret = 0;
dist[1] = 0;
dfs(1, 0);
for(int i = 1; i <= n; i++)
if(ret < dist[i]) ret = dist[i], v = i;
dist[v] = ret = 0;
dfs(v, 0);
for(int i = 1; i <= n; i++)
if(ret < dist[i]) ret = dist[i], v = i;
printf("%lld\n", ret);
}
}

最新文章

  1. Elasticsearch mysql 增量同步
  2. 学完了js的知识,一起分享总结知识点
  3. Mybatis框架_part1
  4. spring(三)----大概是最简单的面向切面了
  5. [转载]ubuntu Atheros Communications Device 1083 驱动
  6. Dynamips做CCNA的实验,说是找不到telnet的解决方案
  7. Dijkstra算法and Floyd算法 HDU 1874 畅通工程续
  8. apache访问控制设置
  9. C++教材
  10. QT第一天学习
  11. 阿里云服务器 发送邮箱 STMP 25端口 465端口问题 Javamail 25被禁用
  12. 数据库-PLSQL登录oracle数据库卡死(未响应)解决方法
  13. 【数据表格】datatable+SpringMVC+Spring Data JPA
  14. UltralEdit 替换回车换行符
  15. Python——dict(自定义类作key)
  16. redmine添加自定义问题状态
  17. vitas高音
  18. HDUOJ-----2838Cow Sorting(组合树状数组)
  19. 计算机通信协议之OSI参考模型
  20. 每日英语:Is It Possible To Reason About Having A Child?

热门文章

  1. 洛谷 P1644 跳马问题
  2. [Angular] HttpParams
  3. 【Codeforces Round #445 (Div. 2) B】Vlad and Cafes
  4. 【hdu 6214】Smallest Minimum Cut
  5. 从Unreal Engine 3到Unreal Engine 4
  6. js实现科学计算机
  7. Redis学习笔记--String(四)
  8. 【BZOJ 2754】[SCOI2012]喵星球上的点名
  9. js模仿块级作用域(js没有块级作用域私有作用域)
  10. &lt;p&gt;&lt;span style=&quot;font-size:14px&quot;&gt;近期须要批量将PNM&amp;#26684;式的文件转换成GIF文件。我尝试了例如以下的图像转换工具:&lt;/span&gt;&lt;/p&gt;