hdu 2196 Computer(树上最长路)
来源:互联网 发布:编程用什么轴键盘 编辑:程序博客网 时间:2024/05/29 15:11
题意是给定一棵树,求以每个点为起点所能得到的最长路。。。校赛的时候moonlight出了一个不固定起始点的树上最长路,当时没想法,赛后A了,没想到今天这个还是卡了很久。。。
求树上不固定起始点的最长路,两次dfs即可,第一次求到的最长路的终点必在最长路上,第二次dfs以其作为起始点就行。。。而这个题,求所有点为起点的最长路,任然需要两次dfs求出最长路及其两个端点,然后再来一次dfs,更新每个节点的最大距离就行。最近开始用宏定义了,感觉宏这个东西,看着挺恶心的,但是效果呢,谁用谁知道!
#include<iostream>#include<algorithm>#include<vector>#include<cstdio>#include<cstring>using namespace std;#define FF(i, a, b) for(int i=a; i<=b; i++)#define FD(i, a, b) for(int i=a; i<=b; i--)#define clr(a, b) memset(a, b, sizeof(a))const int maxn = 10010;int ans[maxn], n, end, max_len;struct Edge{ int to, dist;};vector<Edge> edges;vector<int> G[maxn];void add(int from, int to, int dist){ Edge x; x.to = to, x.dist = dist; edges.push_back(x); x.to = from; edges.push_back(x); int k = edges.size(); G[from].push_back(k-2); G[to].push_back(k-1);}inline void init(){ clr(ans, 0); max_len = 0; edges.clear(); FF(i, 0, n) G[i].clear();}void dfs(int u, int fa, int len){ int nc = G[u].size(); if(len > max_len) max_len = len, end = u; FF(i, 0, nc-1) { int v = edges[G[u][i]].to, w = edges[G[u][i]].dist; if(v != fa) { dfs(v, u, len + w); ans[v] = max(ans[v], len + w); } }}int main(){ while(~scanf("%d", &n)) { init(); int a, b; FF(i, 2, n) { scanf("%d%d", &a, &b); add(i, a, b); } dfs(1, -1, 0); dfs(end, -1, 0); dfs(end, -1, 0); FF(i, 1, n) printf("%d\n", ans[i]); } return 0;}
- hdu 2196 Computer(树上最长路)
- HDU 2196 Computer 树上最长距离
- HDU 2196 - Computer (树上每点最长距离 DP)
- hdu2196 Computer(树上最长路径 dp)
- hdu 2196 Computer(树的直径\树上dp)
- [SGU - 149 Computer Network] 树形DP 求带权树上每个节点的最长路长度
- HDU 2196 浅谈树上多源最长路动态规划求法
- 树上最长路
- hdu 4123 Bob’s Race (树上最长路+RMQ)
- HDU 2196 Computer (tree-DP 树的最长路 经典) #by Plato
- HDU 2196 --Computer 【树的直径 && 每个点的最长路 && 经典】
- hdu 2196 computer 求树上的任意最远点对 O(n)
- HDU 2196 Computer(求树上每个节点到其它点的最远距离)
- HDU 2196 Computer(求树上每个节点到其它点的最远距离 树dp)
- HDU ACM 4514 湫湫系列故事——设计风景线->树上环的判断+树上最长路
- (HDU 2196) Computer <树型DP经典题目 & dfs> 求树上每个节点到最远的叶子结点的路径长度
- HDU 2196 Computer
- hdu 2196 Computer
- 项目三(抽象类CSolid)
- PHP,mysql中修改表,字段的编码
- 第十四周—1.2动物怎么叫
- 网站性能优化之CSS无图片技术
- Android ProgressBar 自定义样式(三),动画模式
- hdu 2196 Computer(树上最长路)
- Ubuntu 12.10安装最新版wine 1.5
- 数据中心网络颠覆性新技术——OpenFlow
- C#用户自定义转换示例
- 管道和socket谁快
- Partitioning by Palindromes
- 立方体类族
- vxworks下的脚本script创建和使用(相当于windows下的autoexec.bat)
- 让谁干活谁干活