hdu 2196(树的最长链)

题意:输出从一颗树中所有结点出发可以走的最长的路。

思路:先找到树上最长链然后判断两个端点中到每个结点远的距离就是答案。

代码如下:

 1 #include <stdio.h>
2 #include <string.h>
3 #include <iostream>
4 #include <algorithm>
5 #include <vector>
6 #include <queue>
7 #include <set>
8 #include <map>
9 #include <string>
10 #include <math.h>
11 #include <stdlib.h>
12 #include <time.h>
13 #define MP(a, b) make_pair(a, b)
14 #define PB(a) push_back(a)
15 using namespace std;
16
17 const int LEN = 10010;
18 const int INF = 0x3f3f3f3f;
19 typedef pair<int, int> pii;
20 vector<pii> Map[LEN];
21 int n, vis[LEN], dis[LEN], disa[LEN];
22
23
24 int bfs(int v){
25 queue<int> q;
26 memset(vis, 0, sizeof vis);
27 memset(dis, 0, sizeof dis);
28 q.push(v);
29 vis[v] = 1;
30 while(!q.empty()){
31 int nv = q.front(); q.pop();
32 for(int i=0; i<Map[nv].size(); i++){
33 int x = Map[nv][i].first;
34 if(!vis[x]){
35 vis[x] = 1;
36 dis[x] = dis[nv] + Map[nv][i].second;
37 q.push(x);
38 }
39 }
40 }
41 int maxv = -INF, maxn;
42 for(int i=0; i<n; i++){
43 if(maxv < dis[i]){
44 maxv = dis[i];
45 maxn = i;
46 }
47 }
48 return maxn;
49 }
50
51 int main()
52 {
53 // freopen("in.txt","r",stdin);
54 // freopen("out.txt","w",stdout);
55
56 int a, b;
57 while(scanf("%d", &n)!=EOF){
58 for(int i=0; i<LEN; i++) Map[i].clear();
59 for(int i=1; i<n; i++){
60 scanf("%d%d", &a, &b);
61 a--;
62 Map[i].PB(MP(a, b));
63 Map[a].PB(MP(i, b));
64 }
65 int vexa = bfs(0);
66 int vexb = bfs(vexa);
67 for(int i=0; i<n; i++)disa[i] = dis[i];
68 bfs(vexb);
69 for(int i=0; i<n; i++){
70 printf("%d\n", max(disa[i], dis[i]));
71 }
72 }
73 return 0;
74 }

hdu 2196(树的最长链),布布扣,bubuko.com

时间: 2024-10-27 14:06:52

hdu 2196(树的最长链)的相关文章

VIJOS1107 求树的最长链

vijos1107环游大同80天 学习了一下求树的最长链的方法 最简单的思路就是两次dfs 两次dfs分别有什么用呢? 第一次dfs,求出某个任意的点能到达的最远的点 第二次dfs,从所搜到的最远的点倒搜回去. 为什么需要两次呢? 其实很容易想通第一遍dfs的起始点或许并不是最长链的起点 从最远的点倒搜到的最长的链就是所求的解 (因为最长链一定经过这个最远的点啊... 这里注意题目表述: 假设任意的两个风景点都有且仅有一条路径(无回路)相连.显然,任意一个风景点都可以作为游览路线的起点或者终点.

HDU 2196 树状dp 求树中节点之间的最长距离

Computer Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3749    Accepted Submission(s): 1892 Problem Description A school bought the first computer some time ago(so this computer's id is 1). Du

HDU 2196 Computer (树上最长路)【树形DP】

<题目链接> 题目大意: 输出树上每个点到其它点的最大距离. 解题分析: 下面的做法是将树看成有向图的做法,计算最长路需要考虑几种情况. dp[i][0] : 表示以i为根的子树中的结点与i的最大距离 dp[i][1] : 表示以i为根的子树中的结点与u的次大距离 dp[i][2] : 表示i往父亲节点方向走的最大距离 第一就是点 i 在以点 i 为根的子树中的最长距离,这个可以直接在点 i 的子树中求得: 第二就是点 i 朝父亲节点方向的最长距离,这个距离分为三种: 1) 点 i 在以 fa

求树的最长链

2次dfs的方法: 1 void dfs(int u,int step) 2 { 3 int tmp=0; 4 if (step>t) 5 { 6 max_dist=step; 7 max_point=u; 8 } 9 for (int i=0;i<ch[u].size();i++) 10 { 11 int v=ch[u][i]; 12 if (!visit[v]) 13 { 14 visit[v]=true; 15 dfs(v,step+1); 16 visit[v]=false; 17 }

sdut3045迷之图论--(多叉树求最长链)

迷之图论 Time Limit: 1000MS Memory limit: 65536K 题目描述 FF是图论高手,所以我要出图论且不出流问题. 给出一个树,求树的最长链的长度. 输入 多组输入.每组输入的第一行为n(1 <= n <= 100000),代表节点个数,节点编号从1 到n,接下来的n-1行,每行两个正整数u,v,代表u,v之间有一条边相连.保证每组数据都是一棵树. 输出 对于每组数据,输出一个正整数代表答案. 示例输入 121 2 示例输出 12 提示 来源 zmx dfs搜索

hdu 5893 (树链剖分+合并)

List wants to travel Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 429    Accepted Submission(s): 92 Problem Description A boy named List who is perfect in English. Now he wants to travel an

hdu 5052 树链剖分

Yaoge’s maximum profit Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 982    Accepted Submission(s): 274 Problem Description Yaoge likes to eat chicken chops late at night. Yaoge has eaten too

hdu 5242 树链剖分找权值最大的前k条链

http://acm.hdu.edu.cn/showproblem.php?pid=5242 Problem Description It is well known that Keima Katsuragi is The Capturing God because of his exceptional skills and experience in ''capturing'' virtual girls in gal games. He is able to play k games sim

hdu 5274 树链剖分

Dylans loves tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1484    Accepted Submission(s): 347 Problem Description Dylans is given a tree with N nodes. All nodes have a value A[i].Nodes