树的直径概念:一颗树上存在的最长路径。
推导过程请参考:https://blog.csdn.net/enjoying_science/article/details/44962389
代码如下(BFS版):
#include<iostream>
#include<stdio.h>
#include<map>
#include<vector>
#include<set>
#include<cstdlib>
#include<string.h>
#include<string>
#include<queue>
#include<algorithm>
#include<cmath>
#define MAXN 5000000
#define LL long long
#define EPS 1e-9
using namespace std;
struct Edge{
int to;
int next;
int w;
}e[MAXN];
int tot,n,max_num,u,v,mst,med;
int dis[MAXN];
bool vis[MAXN];
int head[MAXN];
void init()
{
tot=0;
for(int i=1;i<=n;i++)
{
head[i]=-1;
}
}
void add(int from,int to,int w)
{
e[tot].to=to;
e[tot].w=w;
e[tot].next=head[from];
head[from]=tot++;
}
int maxd;
void bfs(int st)
{
queue<int>q;
int i,now,n