关于图的删边之后连通性问题的一个有趣做法
jys
posted @ Nov 14, 2013 04:07:38 PM
in 未分类
, 2432 阅读
在http://www.cppblog.com/MatoNo1/archive/2013/06/17/200747.html看到的
任取一个生成树。对于每条非树边,随机取一个ULL的值作为权值;对于每条树边,取所有覆盖了它的非树边的权值的异或和作为权值。
一个边集S,在删除S中的边后图刚好不连通的必要条件是S中边的权值的异或和为0.
一个边集S,在删除S中的边后图不连通的充要条件是存在一个S的子集S',删掉S'能使这张图刚好不连通。
多跑几次就可以以RP之名保证正确性。
这个方法好有趣。
类似的思想,可以用非树边给每个点一个权值。
割点割边可以不用tarjan了?
还可以出有意思的题目:给一张n<=1000个点m<=2000条边的图,求在图中删掉三条边使得图不连通的方案数。
删三条边包括:有三种情况(这三种情况存在交集)删一条割边+两条随便的边,删两条可以打出combo的边+一条随便的边,删三条可以打出combo的边。
分情况搞搞,去掉交集部分就行了。
以后我要是牛逼了就把这道题出给小朋友们。