树的直径【bzoj3363】 [Usaco2004 Feb]Cow Marathon 奶牛马拉松
2018-10-11 16:43
471 查看
Description
最近美国过度肥胖非常普遍,农夫约翰为了让他的奶牛多做运动,举办了奶牛马拉松.马拉松路线要尽量长,所以,告诉你农场的地图(该地图的描述与上题一致),请帮助约翰寻找两个最远农场间的距离.
Input
第1行:两个分开的整数N和M.
第2到M+1行:每行包括4个分开的内容,Fi,F2,L,D分别描述两个农场的编号,道路的长度,F1到F2的方向N,E,S,W.
Output
一个整数,表示最远两个衣场间的距离.
明显,这题是求树的直径。
树的直径的定义
树中最远的两个节点之间的距离被称为树的直径,连接这两点的路径被称为树的最长链。后者通常也可称为直径,即直径是一个 数值概念,也可代指一条路径 。
首先随便以某个点为根进行一遍\(dfs\)。找到距离当前点距离最远的节点\(x\).
再以这个节点\(x\)为根进行\(dfs\),找到另一个距离\(x\)最远的点。
代码
#include<cstdio> #include<iostream> #include<cstring> #include<cctype> #define R register #define N 1008611 using namespace std; inline void in(int &x) { int f=1;x=0;char s=getchar(); while(!isdigit(s)){if(s=='-')f=-1;s=getchar();} while(isdigit(s)){x=x*10+s-'0';s=getchar();} x*=f; } int n,m,head ,tot,now,ans,dis ,root; struct cod{int u,v,w;}edge[N<<2]; inline void add(int x,int y,int z) { edge[++tot].u=head[x]; edge[tot].v=y; edge[tot].w=z; head[x]=tot; } void dfs(int u,int fa,int dist) { dis[u]=dis[fa]+dist; for(R int i=head[u];i;i=edge[i].u) { if(edge[i].v==fa)continue; dfs(edge[i].v,u,edge[i].w); } } int main() { in(n),in(m); for(R int i=1,x,y,z;i<=m;i++) { R char opt; in(x),in(y),in(z);cin>>opt; add(x,y,z);add(y,x,z); } dfs(1,0,0); for(R int i=1;i<=n;i++) { if(dis[i]>now) { now=dis[i]; root=i; } } memset(dis,0,sizeof dis); dfs(root,0,0); for(R int i=1;i<=n;i++) ans=max(ans,dis[i]); printf("%d",ans); }
相关文章推荐
- 【BZOJ 3363】[Usaco2004 Feb]Cow Marathon 奶牛马拉松【树的直径】
- 树的直径 【bzoj3363】[Usaco2004 Feb]Cow Marathon 奶牛马拉松
- bzoj 3363: [Usaco2004 Feb]Cow Marathon 奶牛马拉松 树的直径
- 【bzoj3362/3363/3364/3365】[Usaco2004 Feb]树上问题杂烩 并查集/树的直径/LCA/树的点分治
- bzoj 3366: [Usaco2004 Feb]Breeding 奶牛饲育
- 【bzoj3365】[Usaco2004 Feb]Distance Statistics 路程统计 点分治
- POJ - 1985 Cow Marathon 奶牛马拉松 计算树的直径
- POJ 1984/BZOJ 3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦
- bzoj3362[Usaco2004 Feb]Navigation Nightmare 导航噩梦(带权并查集)
- bzoj 3375: [Usaco2004 Mar]Paranoid Cows 发疯的奶牛
- bzoj 3364: [Usaco2004 Feb]Distance Queries 距离咨询 LCA
- BZOJ 3363 POJ 1985 Cow Marathon 树的直径
- bzoj 3369: [Usaco2004 Feb]Pesky Parentheses 烦人括号(思维题)
- bzoj 3367: [Usaco2004 Feb]The Big Game 球赛(DP)
- bzoj 3355: [Usaco2004 Jan]有序奶牛(拓扑排序+bitset)
- BZOJ 3367: [Usaco2004 Feb]The Big Game 球赛( dp )
- 【BZOJ】3364: [Usaco2004 Feb]Distance Queries 距离咨询
- BZOJ 3365 [Usaco2004 Feb]Distance Statistics 路程统计 树的点分治
- BZOJ 3363 POJ 1985 Cow Marathon 树的直径
- bzoj 3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦(加权并查集)