CF2048E
初始分 1750,获得了 825 的高分。将 global round 一半的时间和超过一半的罚时贡献在这道题上。
首先感受一下样例,猜测有解的充要条件是 \(2n>m\)。
对于每种颜色来看,要求该种颜色的子图不存在环。不妨将所有边看作从右边连向左边,设右边第 \(i\) 个点在该颜色子图中连向的点为 \(a_{i,1},a_{i,2},\dots,a_{i,x_i}\),那么必须满足对于 \(1\le i<j\le m\),有 \(|\{a_i\} \cap \{a_j\}|\le 1\)。
根据多年的信息学经验,直觉上对于所有 \(n\) 种颜色的子图,需要尽可能使得每种颜色的子图涵盖 \(2m\) 条边,使得最后 \(2nm\) 条边都被染色。
直接提出染色方法是不自然的,先来考虑 \(2n=m+1\) 的情况。
根据上面所说和我们的经验,每种颜色的子图中的每一个右部点需要连 \(2\) 条边,同时需要满足 \(|\{a_i\}\cap\{a_j\}|\le 1\) 这条要求。对于第一种颜色的子图不加思索地就能提出一种染色方法:\(a_{i,1}=i,a_{i,2}=i+1\)。
手玩一下发现第二种颜色的子图只需要满足 \(a_{i,1}=i+2,a_{i,2}=i+3\)。发现我们会了 \(2n=m+1\) 的情况。
尝试将其套到 \(2n>m\) 的情况上。但是一个问题是每轮中会有若干左部点没有被使用,这是无所谓的,我们每轮都会新增 \(2m\) 条有效边。然后发现做完了。
现在问题在于证明上面的有解条件 \(2n>m\)。我们写一下,发现过了,证明结束。时间复杂度 \(O(nm)\)。