#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
#define siz 10010
const int infinity = 1000000000;
vector <int> vec[siz],cost[siz];
int d[siz];
char as[siz];
int mxNode,mx=0;
void bfs(int source){
for(int i=0;i<=10000;i++) d[i]=infinity;
queue <int> q;
q.push(source);
d[source]=0;
while(!q.empty()){
int u=q.front(); q.pop();
int ucost=d[u];
for(int i=0;i<vec[u].size();i++){
int v=vec[u][i], vcost=cost[u][i]+ucost;
if(d[v]>vcost){
d[v]=vcost;
if(vcost>mx){
mx=vcost;
mxNode=v;
}
q.push(v);
}
}
}
}
void reset(){
for(int i=0;i<=10000;i++){
vec[i].clear();
cost[i].clear();
}
}
int main()
{
int u,v,c,s,d,edge;
//freopen("input.txt","r",stdin);
while(scanf("%d",&edge)==1){
mx=0;
for(int i=0;i<edge;i++){
scanf("%d%d%d",&u,&v,&c);
vec[u].push_back(v);
vec[v].push_back(u);
cost[u].push_back(c);
cost[v].push_back(c);
}
bfs(u);
bfs(mxNode);
printf("%d\n",mx);
reset();
}
return 0;
}
Friday, November 2, 2012
Finding Tree Diameter
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment