您的位置:首页 > 其它

GDOI模拟 染色配对

2016-03-09 17:32 197 查看

题目大意

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

数据范围

N≤2∗105,M≤2∗104

题解

我们不妨将点看成边,将每个极大团看成一个点,那么对于一个点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)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: