![poj2631 树的直径 + bfs poj2631 树的直径 + bfs](https://image.shishitao.com:8440/aHR0cHM6Ly9ia3FzaW1nLmlrYWZhbi5jb20vdXBsb2FkL2NoYXRncHQtcy5wbmc%2FIQ%3D%3D.png?!?w=700&webp=1)
//Accepted 492 KB 0 ms //树的直径 bfs #include <cstdio> #include <cstring> #include <iostream> #include <queue> using namespace std; ; struct node { int u,v,c; node() { } node(int u,int v,int c):u(u),v(v),c(c) { } }p[*imax_n]; int e; int head[imax_n]; ]; void addEdge(int u,int v,int c) { p[e]=node(u,v,c); next[e]=head[u]; head[u]=e++; } void init() { memset(head,-,sizeof(head)); memset(next,-,sizeof(next)); e=; } bool vis[imax_n]; int dis[imax_n]; queue<int >q; int bfs(int s) { ; int temp_node; while (!q.empty()) q.pop(); memset(vis,,sizeof(vis)); q.push(s); vis[s]=; memset(dis,,sizeof(dis)); while (!q.empty()) { int x=q.front(); q.pop(); if (dis[x]>ans) { ans=dis[x]; temp_node=x; } ;i=next[i]) { int y=p[i].v; if (!vis[y]) { vis[y]=; q.push(y); if (dis[x]+p[i].c>dis[y]) dis[y]=dis[x]+p[i].c; } } } return temp_node; } int main() { int x,y,c; init(); while (scanf("%d%d%d",&x,&y,&c)!=EOF) //for (int i=0;i<5;i++) { //scanf("%d%d%d",&x,&y,&c); addEdge(x,y,c); addEdge(y,x,c); } x=bfs(); y=bfs(x); printf("%d\n",dis[y]); ; }