CF1634E Fair Share
I_am_Accepted · · 题解
Preface
我考场上怎么也没想到这是一道图论题 qwq。
Algorithm(1) 是官方做法,但本人认为 Algorithm(2) 更加巧妙且好写。
Algorithm(1)
Analysis
如果有的值出现了奇数次,那显然是不行的。否则,我们下面构造一种分
将数组和每种数值都看作图中的点,每次数值
欧拉回路的知识点和算法不再赘述。
将每条边按欧拉回路的方向定向。
这样,每个代表数值的点和代表数组的点的出入度相等了。我们只需要将 数组
Detail
最方便的是前向星,因为要存反向边是否被遍历过。
Code
Link
Algorithm(2)
Analysis
当然,通往广场的路不止一条。
有解的条件仍然是:每种值都出现偶数次。
我们将数组中的每一个数看作点。边有两种——值边 和 位边。
值边只连接两个值相同的点:想象着将每种值相同的位置存入数组
位边只连接在数组中位置相邻的两个点:设这个数组为
发现最后这是一张二分图,因为不存在奇环。因为如果有奇环,必然有两个值边 或 两个位边 相邻(有公共端点)。而每个点有且仅有 一条值边 和 一条位边 连出去,矛盾,原命题得证。
这样,我们将这个二分图黑白染色,染黑的去
Code
Link