目录
出处
bzoj.org #P11711
Description
给你一棵N(N<=10000)个节点的树,求每个点到其他点的最大距离。
Format
Input
第一行一个数N。 接下来若干行每行两个数k,t描述一条点k到点t的边(输入数据保证无重复边)。
Output
N行每行一个数表示每个点到其他点的最大距离。
Samples
输入数据 1
5
1 2
1 3
1 4
4 5
输出数据 1
2
3
3
2
3
分析
这题我们用换根法
故名思义,就是让每个点依次为根,求出答案
首先建一棵树
int front[200100],last[200100],son[200100],val[200100];
void put(int x,int y,int c)
{
num++;
val[num]=c;
front[num]=last[x];
last[x]=num;
son[num]=y;
}
//这是邻接表
//son[i]:第i条边的子节点
//last[i]:最后一条以i为父结点的边
//front[i]:上一条与第i条边有共同父结点的边
//val[i]:边权(该题中都是1)<