Title: poj 1985 cow marathon
Give a tree and ask for the diameter of the tree.
Analysis:
Tree Diameter: the maximum distance between two points on the tree.
Starting from any point, BFs is the longest distance, and then starting from this point, the longest distance in BFS is the diameter of the tree,
AC code:
/*POJ:1985 Cow Marathon2014/10/12/21:18Yougth*/#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;}
Poj 1985 cow marathon [tree diameter]