poj2631
2024-09-08 05:28:12
求一棵树的直径,所谓直径就是树上距离最远的两个点!
树形动归,每个点的为根的子树的最长向下链和次长链的和!
当然也可以二次深搜!
————————————————————————————————————————————————————
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 }
最新文章
- Mysql触发器
- jQuery EasyUI 使用笔记
- NSLog函数重写
- iOS-代理反向传值<;转>;
- 推荐一个linux下的web压力测试工具神器webbench
- Bootstrap 表单和图片 (内联表单,表单合组,水平排列,复选框和单选框,下拉列表,校验状态,添加额外的图标,控制尺寸,图片)
- map reduce filter
- 基于HTTP 协议认证介绍与实现
- 转:视频压缩的基本概念(x264解压包)
- java导入导出excel常用操作小结及简单示例
- USB系列之二:读取USB设备的描述符
- HTML知识点总结之table
- AC Dream1069
- python3 练手实例3 摄氏温度与华氏温度转换
- JAVA中的String类(详解)
- WIN10下Java环境变量配置
- Golang的排序和查找
- 在vue-cli中引用公共过滤器filter
- 《Go学习笔记 . 雨痕》反射
- zookeeper 的监控指标