求树的直径

来源:互联网 发布:手机游戏端口 编辑:程序博客网 时间:2024/05/17 02:01
#include<cstdio>#include<vector>#include<algorithm>#include<cstring>#include<cctype>#define maxn 100005#define num ch-'0'using namespace std;int n,v,maxnum,loc,dis[maxn],sum;vector<int>son[maxn],dat[maxn];void get(int &res){    char ch;res=0;    while(!isdigit(ch=getchar()));     for(res=num;isdigit(ch=getchar());res=res*10+num);}void dfs(int now,int past){if(dis[loc]<dis[now])loc=now;for(int i=0;i<son[now].size();i++)if(son[now][i]!=past){dis[son[now][i]]=dis[now]+dat[now][i];dfs(son[now][i],now);}}int main(){get(n),get(v);int x,y,z;for(int i=1;i<n;i++){get(x),get(y),get(z);son[x].push_back(y);dat[x].push_back(z);son[y].push_back(x);dat[y].push_back(z);sum+=z;}loc=v;dis[v]=0;dfs(v,-1);memset(dis,127,sizeof dis);dis[loc]=0;dfs(loc,-1);printf("%d",dis[loc]);}