POJ1985 Cow Marathon (树的直径)
用两次dfs求出树的直径,这两次dfs可以写在一起,当然为了方便理解,这里是分开写的。
1 //两次dfs求树的重心
2 #include<cstdio>
3 #include<cstring>
4 #include<algorithm>
5 using namespace std;
6
7 const int N=40005,M=40005*2;
8 int n,m,tot,p,ed;
9 int d[N],head[N],to[M],w[M],nxt[M];
10
11 void add(int x,int y,int z){
12 nxt[++tot]=head[x];
13 head[x]=tot;
14 to[tot]=y;
15 w[tot]=z;
16 }
17
18 void dfs1(int u,int fa){
19 if(d[u]>d[p]) p=u;//更新从起点1能走到的最远点p
20 for(int i=head[u];i;i=nxt[i]){
21 int v=to[i];
22 if(v==fa) continue;
23 d[v]=d[u]+w[i];
24 dfs1(v,u);
25 }
26 }
27
28 void dfs2(int u,int fa){
29 if(d[u]>d[ed]) ed=u;
30 for(int i=head[u];i;i=nxt[i]){
31 int v=to[i];
32 if(v==fa) continue;
33 d[v]=d[u]+w[i];
34 dfs2(v,u);
35 }
36 }
37
38 int main(){
39 scanf("%d%d",&n,&m);
40 for(int i=1;i<=m;i++){
41 int x,y,z;
42 char d;
43 scanf("%d%d%d %c",&x,&y,&z,&d);
44 add(x,y,z);add(y,x,z);
45 }
46 dfs1(1,0);
47 memset(d,0,sizeof(d));
48 dfs2(p,0);
49 printf("%d\n",d[ed]);
50 return 0;
51 }
POJ1985 Cow Marathon (树的直径)的更多相关文章
- poj 1985 Cow Marathon 树的直径
题目链接:http://poj.org/problem?id=1985 After hearing about the epidemic of obesity in the USA, Farmer J ...
- BZOJ 3363 POJ 1985 Cow Marathon 树的直径
题目大意:给出一棵树.求两点间的最长距离. 思路:裸地树的直径.两次BFS,第一次随便找一个点宽搜.然后用上次宽搜时最远的点在宽搜.得到的最长距离就是树的直径. CODE: #include < ...
- poj1985 / poj2631(树的直径)
poj1985 Cow Marathon 树的直径裸题 树的直径的一般求法: 任意一点为起点,dfs/bfs找出与它最远的点$u$ 以$u$为起点,dfs/bfs找出与它最远的点$v$ 则$d(u,v ...
- poj1985 Cow Marathon (求树的直径)
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 3195 Accepted: 1596 Case ...
- [USACO2004][poj1985]Cow Marathon(2次bfs求树的直径)
http://poj.org/problem?id=1985 题意:就是给你一颗树,求树的直径(即问哪两点之间的距离最长) 分析: 1.树形dp:只要考虑根节点和子节点的关系就可以了 2.两次bfs: ...
- [POJ1985] Cow Marathon 「树的直径」
>传送门< 题意:求树的直径 思路:就是道模板题,两遍dfs就求出来了 Code #include <cstdio> #include <iostream> #in ...
- POJ1985Cow Marathon[树的直径]
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 5117 Accepted: 2492 Case ...
- POJ 树的直径和重心
树的直径:(无根)树上最长两点间的最长路径,两次dfs即可,第一次dfs任选一点u,找到距离它最远的点s,再从点s进行一次dfs,找到距离s最远的点t,则s-t之间的路径就是树的直径.证明: < ...
- poj 1985 Cow Marathon【树的直径裸题】
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 4185 Accepted: 2118 Case ...
随机推荐
- Golang 盲注脚本
Golang 盲注脚本 payload部分 其中脚本最重要的环节就是payload部分了,需要如何去闭合,如何构造SQL语句来达到判断的效果.(还有如何绕过waf等等...) bool盲注 下面是最基 ...
- wamp升级php
1. 停止WAMP服务器. 2. 去网站windows.php.net 下载php-5.4.31-nts-Win32-VC9-x86.zip(32位的). 不要下载THE INSTALLER. 3 ...
- EPLAN中的edz文件的用法
1 EDZ 文件的定义 EDZ 是 EPLAN Data Archive Zipped(EPLAN 数据压缩文件包)的缩写,最早是专门为西门子定制的,现在已经 成为 EPLAN 中一种标准的部件 ...
- CF242E XOR on Segment
CF242E XOR on Segment codeforces 洛谷 关于异或,无法运用懒标记实现区间异或: 可以像trie树一样拆位,将每个值拆成二进制数,对此建相应个数的线段树. 0 1与 0异 ...
- 成为 Apache 贡献者,从提交第一个简单 PR 开始!
开源之路,PR 走起 ! ---全球最大同性交友社区 1 fork 以下实例以 incubator-dolphinscheduler 海豚调度为例进行操作 从远端仓库* https://github. ...
- 在Mac上利用压测工具Jmeter-Suite进行一次压测实践的保姆级详细步骤(参考腾讯云文章)
参考的文章 压测工具Jmeter-Suite详细操作步骤 写此文的目的 由于我是刚开始接触kubernetes和jmeter,所以在学习过程中遇到了很多很多问题,同时我很烦恼为什么网上没有文章是从真正 ...
- .NET性能优化-快速遍历List集合
简介 System.Collections.Generic.List<T>是.NET中的泛型集合类,可以存储任何类型的数据,因为它的便利和丰富的API,在我们平时会广泛的使用到它,可以说是 ...
- 前端必备的 HTTP 知识
HTTP 起源 HTTP 是由蒂姆·伯纳斯-李(TimBerners-Lee)于1989年在欧洲核子研究组织(CERN)所发起 其中最著名的是 1999 年 6 月公布的 RFC 2616,定义了 H ...
- 线性代数 | Jordan 标准型的笔记
内容概述: 把方阵 A 的特征多项式 \(c(λ)=|λE-A|\) 展开成 \(c(λ)=\sum_ia_i\lambda^i\) 的形式,然后使用神乎其技的证明,得到 \(c(A)=O\),特征多 ...
- JavaScript之数组常用API
这篇文章主要帮助大家简单理解数组的一些常用API用法,许多小伙伴常用方法记不住?别急,看完下面的介绍您一定就会明白各个方法是如何用的了.该文章适合新手小白看,大佬可以多多指点️! 1.数组的创建以及A ...