POJ 1985 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
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.
Source
USACO 2004 February
先假设节点1是根节点,
跑到离他最远的点,
再从最远的点开始跑,
跑到的最远的的点就是树的直径
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #define lli long long int
6 using namespace std;
7 const int MAXN=100001;
8 void read(int &n)
9 {
10 char c='+';int x=0;bool flag=0;
11 while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
12 while(c>='0'&&c<='9')
13 x=(x<<1)+(x<<3)+c-48,c=getchar();
14 flag==1?n=-x:n=x;
15 }
16 struct node
17 {
18 int u,v,w,nxt;
19 }edge[MAXN];
20 int head[MAXN];
21 int num=1;
22 int n,m;
23 void add_edge(int x,int y,int z)
24 {
25 edge[num].u=x;
26 edge[num].v=y;
27 edge[num].w=z;
28 edge[num].nxt=head[x];
29 head[x]=num++;
30 }
31 int dp[MAXN];
32 int ans=0;
33 int ed=0;
34 void dfs(int u,int fa,int now)
35 {
36 if(now>ans)
37 {
38 ans=now;
39 ed=u;
40 }
41 for(int i=head[u];i!=-1;i=edge[i].nxt)
42 {
43 if(edge[i].v!=fa)
44 dfs(edge[i].v,u,now+edge[i].w);
45 }
46 }
47 int main()
48 {
49 read(n);read(m);
50 memset(head,-1,sizeof(head));
51 for(int i=1;i<=m;i++)
52 {
53 int x,y,z;char c;
54 read(x);read(y);read(z);
55 cin>>c;
56 add_edge(x,y,z);
57 add_edge(y,x,z);
58 }
59 dfs(1,0,0);
60 dfs(ed,0,0);
61 printf("%d",ans);
62 return 0;
63 }
- ASP.NET 2.0加密Web.config 配置文件
- .Net 跨平台可移植类库正在进行
- 掌握机器学习数学基础之概率统计(三)
- IBatisNet 之 自动生成主关键字
- IBatisNet之获取和操作SQL语句
- 大数据研究学者谈城市运行安全:要将应急处置转化为风险管理
- Castle.MVC框架介绍
- 在 .Net 设定 proxy 的方法
- MVC结构简介
- 优酷、爱奇艺、摩拜……多家网络平台被曝注册容易注销难!面临个人隐私泄露风险
- WordPress中借助.htaccess屏蔽某个IP或某个IP段(防垃圾评论)
- ASP.NET 调味品:AJAX
- CTreeCtrl 控件使用总结
- 高盛成立交易部门,涉足比特币和加密货币交易
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- c++STL容器之set/multiset容器
- c++STL容器之list容器
- c++STL容器之deque容器
- Web自动化必会「Web基础、元素定位、元素操作、Selenium运行原理、项目实战+框架」
- HTML5 meta viewport参数详解
- 二分查找应该都会,那么二分查找的变体呢?
- TypeScript 实战算法系列(三):实现链表与变相链表
- JavaScript 测试系列实战(一):使用 Jest 和 Enzyme 测试 React 组件
- TypeScript 实战算法系列(二):实现队列与双端队列
- VBA位操作
- VBA编写Ribbon Custom UI编辑器07——写入xml
- Linux下在文件夹所有文件中查找相关内容
- archlinux安装篇(一) 基本系统
- git使用要点
- 七夕 - 程序员表白代码