求一棵树的直径,所谓直径就是树上距离最远的两个点!

树形动归,每个点的为根的子树的最长向下链和次长链的和!

当然也可以二次深搜!

————————————————————————————————————————————————————

 1 #include<cstdio>
2 #include<cstring>
3 #include<algorithm>
4 #include<iostream>
5 using namespace std;
6 const int maxn=10010;
7 struct edge
8 {
9 int u,v,w,next;
10 }e[maxn<<1];
11 int head[maxn],js;
12 long long ans;
13 long long ml[maxn],sl[maxn];
14 void addage(int u,int v,int w)
15 {
16 e[++js].u=u;e[js].v=v;e[js].w=w;
17 e[js].next=head[u];head[u]=js;
18 }
19 void dfs(int u,int fa)
20 {
21 for(int i=head[u];i;i=e[i].next)
22 {
23 int v=e[i].v;
24 if(v!=fa)
25 {
26 dfs(v,u);
27 if(ml[v]+e[i].w>ml[u])
28 {
29 sl[u]=ml[u];
30 ml[u]=ml[v]+e[i].w;
31 }
32 }
33 else if(ml[v]+e[i].w>sl[u])
34 sl[u]=ml[v]+e[i].w;
35 }
36 if(ml[u]+sl[u]>ans)ans=ml[u]+sl[u];
37 }
38 int main()
39 {
40 int u,v,w;
41 while(scanf("%d%d%d",&u,&v,&w)==3)
42 {
43 addage(u,v,w);
44 addage(v,u,w);
45 }
46 dfs(1,0);
47 cout<<ans;
48 return 0;
49 }

最新文章

  1. Mysql触发器
  2. jQuery EasyUI 使用笔记
  3. NSLog函数重写
  4. iOS-代理反向传值&lt;转&gt;
  5. 推荐一个linux下的web压力测试工具神器webbench
  6. Bootstrap 表单和图片 (内联表单,表单合组,水平排列,复选框和单选框,下拉列表,校验状态,添加额外的图标,控制尺寸,图片)
  7. map reduce filter
  8. 基于HTTP 协议认证介绍与实现
  9. 转:视频压缩的基本概念(x264解压包)
  10. java导入导出excel常用操作小结及简单示例
  11. USB系列之二:读取USB设备的描述符
  12. HTML知识点总结之table
  13. AC Dream1069
  14. python3 练手实例3 摄氏温度与华氏温度转换
  15. JAVA中的String类(详解)
  16. WIN10下Java环境变量配置
  17. Golang的排序和查找
  18. 在vue-cli中引用公共过滤器filter
  19. 《Go学习笔记 . 雨痕》反射
  20. zookeeper 的监控指标

热门文章

  1. easyui 动态添加input标签
  2. Turtlebot3新手教程-应用-跟随
  3. Linux系统下qt程序运行找不到IGL
  4. Head First 设计模式 —— 03. 装饰器 (Decorator) 模式
  5. Task1:知识图谱介绍(1天)
  6. 机器学习笔记&#183;adaboost
  7. 剑指 Offer 16. 数值的整数次方
  8. 【IMPDP】ORA-31655
  9. 洛谷P1198 [JSOI2008]最大数(线段树/单调栈)
  10. ctfhub技能树—RCE—过滤目录分隔符,过滤运算符