题意:有一个n个点m条边的无向图,需要任意割两条边使图不连通。求方案数。
假设我们有了图的任意一个生成树,易知答案一共由三个部分贡献
- 如果某两个点只被某两条边同时覆盖,那么同时删去这两条边;
- 如果任意一条由根出发的路径上,如果任意两条树边它们被其他边覆盖情况是一样的,那么我们可以把这两条树边删去中间部分就会变得与原图不连通;
- 桥+任意一条边。
其中1和3只要随便做一次树上差分跑个dfs就可以统计贡献。难点是我们如何维护任意树边被其他边的覆盖情况。
我们可以对路径hash
- 像查分一样在路径两端+-上一个随机值,或者同时亦或上一个随机值(推荐使用后者,加和太容易冲突了)。
- 两个树边的权值如果相同那么它们的被其他边覆盖的情况是一样的。
把上述情况全部加起来就是最终结果了。
#include
#include
#include
#include
#include
#include
#include
#include