Farthest Nodes in a Tree ---LightOj1094(树的直径)
2015-08-18 09:30
501 查看
题目链接:http://lightoj.com/volume_showproblem.php?problem=1094
Given a tree (a connected graph with no cycles), you have to find the farthest nodes in the tree. The edges of the tree are weighted and undirected. That means you have to find two nodes in the tree whose distance is maximum amongst all nodes.
Each case starts with an integer n (2 ≤ n ≤ 30000) denoting the total number of nodes in the tree. The nodes are numbered from 0 to n-1. Each of the next n-1 lines will contain three integers u v w (0 ≤ u, v < n, u ≠ v, 1 ≤ w ≤ 10000) denoting that node u and v are connected by an edge whose weight is w. You can assume that the input will form a valid tree.
刚读的时候就是感觉是最长璐, 后来知道就是树的直径;
View Code
Given a tree (a connected graph with no cycles), you have to find the farthest nodes in the tree. The edges of the tree are weighted and undirected. That means you have to find two nodes in the tree whose distance is maximum amongst all nodes.
Input
Input starts with an integer T (≤ 10), denoting the number of test cases.Each case starts with an integer n (2 ≤ n ≤ 30000) denoting the total number of nodes in the tree. The nodes are numbered from 0 to n-1. Each of the next n-1 lines will contain three integers u v w (0 ≤ u, v < n, u ≠ v, 1 ≤ w ≤ 10000) denoting that node u and v are connected by an edge whose weight is w. You can assume that the input will form a valid tree.
Output
For each case, print the case number and the maximum distance.Sample Input | Output for Sample Input |
2 4 0 1 20 1 2 30 2 3 50 5 0 2 20 2 1 10 0 3 29 0 4 50 | Case 1: 100 Case 2: 80 |
Notes
Dataset is huge, use faster i/o methods.刚读的时候就是感觉是最长璐, 后来知道就是树的直径;
#include<stdio.h> #include<string.h> #include<queue> #include<algorithm> using namespace std; #define N 32200 #define INF 0xfffffff int Head , cnt, Max, Index, vis , d ; struct node { int v, L, next; }e[N*2]; void Add(int u, int v, int L) { e[cnt].L = L; e[cnt].v = v; e[cnt].next = Head[u]; Head[u] = cnt++; } void bfs(int u) { memset(vis, 0, sizeof(vis)); queue<int>Q; int p, q; d[u]=0; vis[u]=1; Q.push(u); while(Q.size()) { p=Q.front(); Q.pop(); for(int i=Head[p]; i!=-1; i=e[i].next) { q=e[i].v; if(!vis[q]) { vis[q]=1; d[q] = d[p] + e[i].L; Q.push(q); if(Max<d[q]) { Max = d[q]; Index = q; } } } } } int main() { int T, n, t=1, a, b, c; scanf("%d", &T); while(T--) { memset(Head, -1, sizeof(Head)); memset(d, 0, sizeof(d)); cnt = 0; scanf("%d", &n); for(int i=1; i<n; i++) { scanf("%d%d%d", &a, &b, &c); Add(a+1, b+1, c); Add(b+1, a+1, c); } Max = 0; Index = -1; bfs(1); bfs(Index); printf("Case %d: %d\n", t++, Max); } return 0; }
View Code
相关文章推荐
- hadoop2.0的datanode数据存储文件夹策略的多个副本
- Lightoj 1094 - Farthest Nodes in a Tree 【树的直径裸题】
- 玩转Node.js - 05. LS 过滤器
- PhoneGap安装 环境搭建及配置
- zTree在Angular中的使用
- LeetCode 25 Reverse Nodes in k-Group
- Node.js静态文件服务器实战(接触nodejs开发中比较实用的部分技巧,获益匪浅)
- 【LeetCode】237. Delete Node in a Linked List
- node.js中模块报错【window is not defined】的解决方法
- Lightoj 1094 - Farthest Nodes in a Tree 【树的直径 裸题】
- LeetCode:Populating Next Right Pointers in Each Node
- Nodejs自带模块querystring的使用简介
- 11203-rac升级到11204遇到的INS-06006和无法发现node的问题
- 浅谈PHP与Node.js的区别
- nodejs之路-[0]安装及简易配置
- nodejs之路-[0]安装及简易配置
- 玩转Node.js - 04. 第一个异步 I/O!
- ubuntu12.04安装node.js详细步骤
- Node.js开发入门—使用cookie保持登录
- nodejs抓取数据二(列表解析)