zoukankan      html  css  js  c++  java
  • 树的直径 【bzoj3363】[Usaco2004 Feb]Cow Marathon 奶牛马拉松

    3363: [Usaco2004 Feb]Cow Marathon 奶牛马拉松

    Description

    ​ 最近美国过度肥胖非常普遍,农夫约翰为了让他的奶牛多做运动,举办了奶牛马拉松.马拉

    松路线要尽量长,所以,告诉你农场的地图(该地图的描述与上题一致),请帮助约翰寻找两个

    最远农场间的距离.

    Input

    ​ 第1行:两个分开的整数N和M.

    ​ 第2到M+1行:每行包括4个分开的内容,Fi,F2,L,D分别描述两个农场的编号,道路的长

    度,F1到F2的方向N,E,S,W.

    Output

    ​ 一个整数,表示最远两个衣场间的距离.

    找树的直径,水。

    m和opt都是没有用的。

    code

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int wx=500017;
    inline int read(){
    	int sum=0,f=1;char ch=getchar();
    	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    	while(ch>='0'&&ch<='9'){sum=(sum<<1)+(sum<<3)+ch-'0';ch=getchar();}
    	return sum*f;
    }
    struct e{
    	int nxt,to,dis;
    }edge[wx];
    int n,m,k,num;
    int ans,maxn,pos;
    int head[wx],dis[wx];
    void add(int from,int to,int dis){
    	edge[++num].nxt=head[from];
    	edge[num].to=to;
    	edge[num].dis=dis;
    	head[from]=num;
    }
    void dfs(int u,int fa){
    	for(int i=head[u];i;i=edge[i].nxt){
    		int v=edge[i].to;
    		if(v==fa)continue;
    		dis[v]=dis[u]+edge[i].dis;
    		dfs(v,u);
    	}
    }
    int main(){
    	n=read();read();
    	for(int i=1;i<n;i++){
    		int x,y,z;
    		x=read();y=read();z=read();scanf("%s");
    		add(x,y,z);add(y,x,z);
    	}
    	dfs(1,0);
    	for(int i=1;i<=n;i++){
    		if(maxn<dis[i]){
    			maxn=dis[i];pos=i;
    		}
    	}
    	memset(dis,0,sizeof dis);
    	dfs(pos,0);
    	for(int i=1;i<=n;i++){
    		ans=max(ans,dis[i]);
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    开发周记
    开发日记03
    开发日记01
    MVC实例应用
    MVC概述
    23种设计模式简述
    xx系统属性分析
    淘宝网质量属性
    架构漫谈阅读笔记
    浅谈软件架构师工作流程
  • 原文地址:https://www.cnblogs.com/wangxiaodai/p/9765385.html
Copyright © 2011-2022 走看看