This is the problem to find the tree diameter.
#include <iostream> #include <fstream> #include <sstream> #include <map> #include <vector> #include <string> #include <queue> #include <string.h> #include <stdio.h> #define ull unsigned long long #define SZ 10002 #define FOR(i,a) for(int i=0;i<a;i++) using namespace std; vector<int> graph[SZ]; bool visit[SZ]; int distnce[SZ][SZ]; ull distnode[SZ]; ull max_dist=0; int farthestnode; void bfs(int u) { int tmp; memset(visit,0,sizeof(visit)); int next_node; max_dist=0; queue<int> q; q.push(u); distnode[u]=0; while(!q.empty()) { tmp = q.front(); q.pop(); visit[tmp]=1; if(distnode[tmp]>max_dist) { max_dist=distnode[tmp]; farthestnode = tmp; } for(int i=0;i<graph[tmp].size();i++) { next_node = graph[tmp][i]; if(!visit[next_node]) { distnode[next_node]=distnode[tmp]+distnce[tmp][next_node]; q.push(next_node); } } } } int main() { string s,s1; int from,dest,cost; stringstream ss; while(!cin.eof()) { getline(cin,s); if(s=="") { cout<<0<<"\n"; continue; } FOR(i,SZ) graph[i].clear(); memset(distnce,0,sizeof(distnce)); memset(distnode,0,sizeof(distnode)); while(!cin.eof() && s.size()>0) { if(s=="") break; ss.clear(); ss<<s; ss>>from>>dest>>cost; graph[from].push_back(dest); graph[dest].push_back(from); distnce[from][dest]=cost; distnce[dest][from]=cost; getline(cin,s); } bfs(1); bfs(farthestnode); cout<<max_dist<<"\n"; } return 0; }