6458. 【GDOI2020模拟02.03】城市破坏

题目

给你个无向图,然后有若干个独立的询问。
每次都是问删去一些边后图是否连通(不超过 4 4 4条边)


思考历程

一开始一直在想Tarjan,还想着能不能层层缩点……
后来突然发现,这直接上动态维护图的连通性问题板子就好了!
然后不到 30 m i n 30min 30min直接碾了过去。


正解

正解怎么会是这么模板的东西呢??!
正解是非常优秀的随机化算法。
我们对每条边构造一个权值,使得对于所有的连通块,连出去的所有边的权值异或和恰好为 0 0 0
反过来,我们(假装)认为如果一些边异或起来是 0 0 0,那么删去这些边之后,某个连通块跟其它地方隔绝了。
很显然,这样子认为的正确性是有问题的。但实际上,只要你将边权的取值范围都开得特别大,那么出错的概率非常小。
接下来考虑怎么构造。
一个点是最小的连通块,我们先要保证一个点的出边的异或和为 0 0 0
然后就可以发现一条性质:如果我们保证每个点的出边的异或和为 0 0 0,那么就可以保证每个连通块的出边的异或和为 0 0 0
因为如果将连通块内的点的所有出边都异或起来,和为 0 0 0;并且连通块内的边各出现两次,被抵消;所以最后只剩下连通块的出边。
那么我们只需要让每个点都满足条件就好了。
接下来直接构造就完事啦,至于怎么造就不说了吧……


总结

没有打正解,所以代码懒得发。比赛时的做法太板,发出来没有意义。
随机化算法的重要思想:如果有些命题成立,而逆命题不一定成立,但是不成立的概率很小,那这时候就可以考虑一下随机化了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值