题目链接:http://poj.org/problem?id=2631
求树上的最大距离
方法:任选一点bfs,求出其他点到此点的最短距离,然后选取距离最大的点(此点为最长路的一个端点)再做一次bfs,然后选取距离最大的点(此点为最长路的另外一个端点)二者之间的距离即为树上的最大距离。
code:
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#define INF 1000000000
using namespace std;
const int maxn=10050;
const int maxe=40000;
struct edge
{
int to,next,cost;
} P[maxe];
int head[maxn],si;
int dis[maxn],que[maxe],nn;
void add_edge(int s,int t,int cc)
{
P[si].to=t;
P[si].cost=cc;
P[si].next=head[s];
head[s]=si++;
}
void bfs(int u)
{
for(int i=0;i<=nn;i++) dis[i]=INF;
int hh,tt;
hh=tt=0;
que[tt++]=u;
dis[u]=0;
while(hh!=tt){
int v=que[hh+