题意:给一个无向图,问每次加一条边剩余的桥是多少。
这题有更优的方法,不用缩点,不过为了学习缩点还是学习了下面的算法。
&&吐槽,这题数据弱,时限宽,各种姿势的暴力都随便过。
先求出边双连通分支,然后缩点成一颗新的树。
怎么缩呢:只把不属同一双连通分支的边加到新树中。
显然的是,每在两个点之间添加一条边,那么这两个点到它们的最近公共祖先之间的边都不再是桥。这里允许每次暴力求LCA,然后把两个点到lca之间有多少边算出来,就是减少的桥。但有个问题这样的话有些边会被减多次,这里用并查集来解决,每次把新组成的一个双连通分支放到一个并查集里,如果某点在并查集里,就直接跳到根上,虽然损失了一些时间,但是避免了重复计算。
【代码】
/* ***********************************************
Author :angon
************************************************ */
#include
#include
#include
#include
#include
#include
#include
#include
#include