Light OJ 1257 Farthest Nodes in a Tree (II) (树形DP)
2016-02-15 11:41
696 查看
解析:树直径的模版题。
: [code]#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn = 30005; struct Nod{ int b,val,next; void init(int b,int val,int next){ this->b=b;this->val=val;this->next=next; } }buf[maxn<<1]; int n,m,len,E[maxn],dp[maxn][3],mlen[maxn]; void init(){ len = 0; memset(E,-1,sizeof(E)); memset(dp,0,sizeof(dp)); memset(mlen,0,sizeof(mlen)); } void addEdge(int a,int b,int val){ buf[len].init(b,val,E[a]);E[a]=len++; buf[len].init(a,val,E[b]);E[b]=len++; } void dfs(int u,int pre){ int v,cost,i; for(i = E[u];i != -1;i = buf[i].next){ v = buf[i].b;cost = buf[i].val; if(v == pre) continue; dfs(v,u); if(dp[u][0] < dp[v][0] + cost){ dp[u][1] = dp[u][0]; dp[u][0] = dp[v][0]+cost; }else if(dp[u][1] < dp[v][0]+cost) dp[u][1] = dp[v][0]+cost; } } void ndfs(int u,int pre){ int dist,i; for(i = E[u];i != -1;i = buf[i].next) if(buf[i].b==pre){ dist = buf[i].val;break; } if(pre != -1){ if(dp[u][0]+dist==dp[pre][0]){ dp[u][2] = dist + max(dp[pre][1],dp[pre][2]); }else dp[u][2] = dist + max(dp[pre][0],dp[pre][2]); } for(i = E[u];i != -1;i = buf[i].next) if(buf[i].b != pre) ndfs(buf[i].b,u); } int main(){ int i,j,cas,T,u,v,w; scanf("%d",&cas); for(T = 1;T <= cas;T++){ scanf("%d",&n); init(); for(i = 1;i < n;i++){ scanf("%d%d%d",&u,&v,&w); addEdge(u,v,w); } dfs(0,-1);ndfs(0,-1); printf("Case %d:\n",T); for(i = 0;i < n;i++){ mlen[i] = max(dp[i][0],dp[i][2]); printf("%d\n",mlen[i]); } } return 0; }
相关文章推荐
- NodeJS获取命令行后面的参数
- node
- nodejs学习笔记三——nodejs使用富文本插件ueditor
- nodejs学习笔记三——nodejs使用富文本插件ueditor
- WebStorm+Node.js开发环境的配置
- Nodejs爬虫进阶教程之异步并发控制
- Nodejs爬虫进阶教程之异步并发控制
- 使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
- 24. Swap Nodes in Pairs LeetCode
- 116. Populating Next Right Pointers in Each Node LeetCode
- hadoop 源码中NameNode与DataNode主要的类目录
- nodepad++ 插件
- Namenode的高可用性总结
- This node has namespaceId '1902198261 and clusterId 'CID-0ce44319-7032-49ec-83e5-4df0782a0d4e' but t
- node 配置文件
- Node.js 条形码识别程序构建思路详解
- Nodejs Assert
- NodeJS 断言的使用
- Node.js 条形码识别程序构建思路详解
- python、nodejs和java性能对比