法一:正推
红色的边在蓝色的树上覆盖,一定每次选择的是覆盖次数为1的边的覆盖这条边的红色边连出来
覆盖次数可以树剖找到
这条红色边,可以开始的时候每个红色边的编号打标记到线段树节点的vector里
找一个覆盖次数为1的边的时候,沿途的vector不断弹出已经连出的红色边,一定会找到有且只有一个红色边
链的覆盖次数--,标记这个红色边已经连好。
法二:倒推在Ta的博客查看
最后连的一定是一个红色和蓝色的重(chong)边
不断找重边,然后缩点,(u,v)边表启发式合并。
具体找新的重边:
用一个map存每个边的出现次数
设把v合并到u里,就遍历所有v的出边(包括蓝色和红色的)删除原来的v的所有痕迹,加上u的
如果某个边出现2次,就是重边,加入
新的重边一定是u连出去一条和v连出去的一条重了,所以一定可以考虑到。