BZOJ1123: [POI2008]BLO

正文索引 [隐藏]

Description

Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通。

Input

输入n<=100000 m<=500000及m条边

Output

输出n个数,代表如果把第i个点去掉,将有多少对点不能互通。

Sample Input

5 5
1 2
2 3
1 3
3 4
4 5

Sample Output

8
8
16
14
8

题解

求割点,一个简单的方法就是使用Tarjan。
我们在Tarjan的同时考虑一条树枝边(u,v),即u为v的父亲。此时dfn[u]<=low[v],即其儿子v无法到达比起标号更小的节点,那么这个点就是一个割点。统计的时候主要在每个点第一次访问的时候统计!
至于答案的统计嘛!主要要算上去掉的点与其他所有点都不连通的贡献。

代码