求树的直径
/*
POJ:1985 Cow Marathon
2014/10/12/21:18
Yougth*/
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
const int N = 44000;
struct Node
{
int to,cap;
};
vector<Node> v[N];
int vis[N],dis[N];
int ans;
int BFS(int x)
{
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
queue<int> q;
q.push(x);
vis[x]=1;
int point = 0;
while(!q.empty())
{
int f=q.front();
q.pop();
if(dis[f]>ans)
{
ans = dis[f];
point = f;
}
for(int i=0;i<v[f].size();i++)
{
Node tmp = v[f][i];
if(vis[tmp.to]==0)
{
vis[tmp.to]=1;
dis[tmp.to] = dis[f] + tmp.cap;
q.push(tmp.to);
}
}
}
return point;
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
for(int i=0;i<m;i++)
{
int x,y,z;
char c;
scanf("%d %d %d %c",&x,&y,&z,&c);
v[x].push_back((Node){y,z});
v[y].push_back((Node){x,z});
}
ans = 0;
int point = BFS(1);
ans = 0;
BFS(point);
printf("%d\n",ans);
for(int i=0;i<=n;i++)
v[i].clear();
}
return 0;
}