GDOI模拟 染色配对

题目大意

定义一个点的集合 S 为团,当且仅当对于任意S中的两个点,都有边直接连接。定义极大团表示这个集合是团,并且不存在另外一个团包含它。现在给定一副特殊的图,图中的每个点恰好属于两个极大团,给定每个点属于的两个极大团的编号,问这个图的最大匹配是多少,以及其中一种匹配方案。设图中有 N 个点,总共有M个极大团。

数据范围

N2105,M2104

题解

我们不妨将点看成边,将每个极大团看成一个点,那么对于一个点 i ,若他属于极大团a,b,我们就给 a,b 连上一条编号为 i 的边。之后我们都将极大团称为点。

对于一个联通块,设块中有Size条边,那么这个联通块的最大匹配的上界就是 Size2 ,因为一个匹配需要两条边,接下来就是要找到一种算法使得这个连通块能达到上界,可以发现的是,原问题等价于我们给每条无向边确定一个方向,最后最大化入度为偶数的点的数量。

那么我们递归这个联通块,弄出一个Dfs树,对于一条反祖边或者树上的边 (u,v) ,我们可以强制使得这条边的方向就是 v ,最后再进行调整。设当前我们递归完u的子树,其中有 cu 条边指向了 u ,并且每条回到u的返祖边都已经确定了方向了。假如 cu 为偶数,那么我们已经达到目的了,不需要调整,假如 cu 为奇数,若 u 不是根节点,那么必然存在一条从父亲到u的边,我们可以将这条边反向,那么 cu 就变成偶数了。所以假如 u 不为根,我们总是能获得一种合法的方案使得cu为偶数。

那么对于一个连通块,假如原来有 Size 条边, Size 为偶数,并且除根以外所有点入度均为偶数,那么根的入度也为偶数,贡献恰好为 Size2 ,若 Size 为奇数,除根以外入度为偶数,但根无法调整,依然为奇数,但贡献依然恰好为 Size2 ,因此这个算法是正确的。

最终若一条边 i 指向了点j,我们就将 i 塞入j的匹配列表中,输出答案时只需要将 j 的匹配列表中的点逐个匹配即可。

复杂度为O(M+N)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值