POJ 1985-Cow Marathon【树的直径模板】
2016-04-26 19:04
330 查看
Cow Marathon
Description
After hearing about the epidemic of obesity in the USA, Farmer John wants his cows to get more exercise, so he has committed to create a bovine marathon for his cows to run. The marathon route will include a pair of farms and a path comprised of a sequence
of roads between them. Since FJ wants the cows to get as much exercise as possible he wants to find the two farms on his map that are the farthest apart from each other (distance being measured in terms of total length of road on the path between the two farms).
Help him determine the distances between this farthest pair of farms.
Input
* Lines 1.....: Same input format as "Navigation Nightmare".
Output
* Line 1: An integer giving the distance between the farthest pair of farms.
Sample Input
Sample Output
Hint
The longest marathon runs from farm 2 via roads 4, 1, 6 and 3 to farm 5 and is of length 20+3+13+9+7=52.
解题思路:
树的直径,来,上模板。不用考虑最后那个方向,就是拿来逗人的。
Time Limit: 2000MS | Memory Limit: 30000K | |
Total Submissions: 4583 | Accepted: 2265 | |
Case Time Limit: 1000MS |
After hearing about the epidemic of obesity in the USA, Farmer John wants his cows to get more exercise, so he has committed to create a bovine marathon for his cows to run. The marathon route will include a pair of farms and a path comprised of a sequence
of roads between them. Since FJ wants the cows to get as much exercise as possible he wants to find the two farms on his map that are the farthest apart from each other (distance being measured in terms of total length of road on the path between the two farms).
Help him determine the distances between this farthest pair of farms.
Input
* Lines 1.....: Same input format as "Navigation Nightmare".
Output
* Line 1: An integer giving the distance between the farthest pair of farms.
Sample Input
7 6 1 6 13 E 6 3 9 E 3 5 7 S 4 1 3 N 2 4 20 W 4 7 2 S
Sample Output
52
Hint
The longest marathon runs from farm 2 via roads 4, 1, 6 and 3 to farm 5 and is of length 20+3+13+9+7=52.
解题思路:
树的直径,来,上模板。不用考虑最后那个方向,就是拿来逗人的。
#include <iostream> #include<stdio.h> #include <string.h> #define MAXN 60005 #define INF 0x3f3f3f3f using namespace std; struct Edge { int v, w, next; }edge[MAXN*6]; int m,head[MAXN], vis[MAXN], d[MAXN], q[MAXN], e, n; int init() { e = 0; memset(head, -1, sizeof(head)); } void add(int u, int v, int w) { edge[e].v = v; edge[e].w = w; edge[e].next = head[u]; head[u] = e++; } void bfs(int src) { for (int i = 1; i <= n; i++) { vis[i] = 0; d[i] = INF; } int h = 0, t = 0; vis[src] = 1; q[t++] = src; d[src] = 0; while (h < t) { int u = q[h++]; for (int i = head[u]; i != -1; i = edge[i].next) { int v = edge[i].v; int w = edge[i].w; if (d[u] + w < d[v]) { d[v] = d[u] + w; if (!vis[v]) { q[t++] = v; vis[v] = 1; } } } } } int main() { int u, v, w; while(scanf("%d%d",&n,&m)!=EOF) { init(); char pp; for (int i=1;i<=m; i++) { scanf("%d%d%d %c",&u,&v,&w,&pp); add(u, v, w); add(v, u, w); } bfs(1); int pos = 0, mx = -1; for (int i = 1; i <= n; i++) { if(d[i] > mx) { mx = d[i]; pos = i; } } bfs(pos); mx = -1; for (int i = 1; i <= n; i++) { if(d[i] > mx) { mx = d[i]; } } printf("%d\n",mx); } return 0; }
相关文章推荐
- git commit合并
- 机器学习——BP神经网络模型
- POJ2385-Apple Catching
- robots.txt 不让搜索引擎收录网站的方法
- VC++的Unicode编程
- 计数排序
- Oracle12c学习(三)---虚拟机win2008r2系统下Oracle Rac安装配置
- Object-c------类的声明与实现以及注意事项
- QLockFile,QRunInfo
- 计算机网络各层协议
- HEOI2016游记
- OC_复制内容到粘贴板
- Windows下Anaconda的安装和简单使用
- 数据结构-树的基本操作
- [Angular 2] Using ngrx/store and Reducers for Angular 2 Application State
- Android之RadioGroup+ViewPager制作的底部导航栏
- NYOJ42(dfs or 并查集)
- 递归函数的练习,汉诺塔问题的程序实现(递归)
- go 简介学习
- 凯撒密码