边
题目描述
本题中所有的图都指的是无重边无自环的无向图。
定义正则图为每个点度数都相等的图,\(k\) 正则图为每个点度数都为 \(k\) 的图,偶正则图为每个点度数都为偶的图。
有一张偶正则图,构造删边方案使之变成 \(2\) 正则图(就是若干个环)。
\(n,m\leq 10^5\)
解法
首先有一个经典问题,如果是有向图要求环的话,我们把每个点拆成入点和出点,跑二分图匹配就可以得到答案。
但是这道题给的是无向图,那么给无向图的每条边定向就可以用有向图的方法了。注意到每个点的度数都是偶数且相等这个关键条件,可以跑原图的欧拉回路来定向,这样每个点就有 \(k\) 个入边和 \(k\) 个出边了。
但是我们要证明转化过来的有向图也一定能求出解才算严谨。根据 \(\tt Hall\) 定理:如果 \(X\) 部的任意若干个点至少和 \(Y\) 部等量的点相邻,那么这个图存在完备匹配。考虑 \(X\) 部的 \(x\) 个点,至少向 \(Y\) 部连了 \(kx\) 个边,如果对应的点数小于 \(x\) 说明存在度数大于 \(k\),矛盾,故一定会有解。
最后再说一些关于欧拉回路的细节,因为这题的欧拉回路是要把每个边访问一遍,正常的欧拉回路是访问每个点,所以在 \(\tt dfs\) 的时候要 充分的扩展
,一条路走到黑是不行的,所以有一个地方不要 \(\tt break\)
二分图匹配用 \(\tt dinic\),总所周知复杂度是 \(O(m\sqrt m)\) 的。
#include
#include
#include
#include