Loading

CF1634E Fair Share

如果没有官方做法是个好题。

首先欧拉回路的做法就不说了,太唐了。

考虑一下另外一种做法,将 \(m\) 个数组捆绑编号,每个数组每两个相邻位置为一组连边,再将相同值的位置从小到大拉出来,每两个相邻元素为一组连边,此时这张图是二分图,跑黑白染色,黑色给第一个集合,白色给第二个集合即可。

思考这么做为什么是对的,我们要分两部分思考:

  1. 为什么图是二分图。
  2. 为什么此时能满足 \(L = R\)
  3. 为什么此时能满足每个数组 \(L\) 取一半,\(R\) 取一半。

首先回答第一个问题,注意到相同元素内连边最多是一条链,而图又是由多条链拼在一起的,没有奇环,所以是二分图。

第二个问题,为什么能够保证分组一致,首先我们想,同一个值内相邻两位置填不同的是肯定满足条件,也就是必定分为两边,构造满足条件。

第三个问题,为什么满足 \(L\) 取一般,\(R\) 取一般,考虑相邻两个位置互不相同,又因为长度为偶数,所以必定有一半位置分给 \(L\),一半位置分给 \(R\)

这么构造是十分牛的。

posted @ 2025-06-30 15:35  Alexande  阅读(10)  评论(0)    收藏  举报