题解:CF1887E Good Colorings
想了好长时间才会了证明为什么一定有解。(假设一开始全部染好了)
大概就是我归纳
考虑任意取出来一行,如果这样一种颜色的个数
如果大于等于
那我对于其中一列,有且仅有一种颜色,仅在这一列出现。所以归纳假设就好。
以上论证可能和正解没有必然联系。
但是可能启示了一些,找到每行每列有且仅有两个涂了色的格子的行列组。
你考虑如果找到了(一定能找到),你可以对于每个格子,向行与之相同和列与之相同的格子连边。
这样出现一些环。(不连通取其中一个就好)
然后考虑你将环(环长一定为偶数)分成两个相近的奇数长度,添加一个断点。
这样就可以恰好使得环长减半。没了。
然后说一下怎么找【每行每列有且仅有两个涂了色的格子的行列组】。
我的做法是,你现在原网格上,每个点朝四个方向最近的点连边,然后找到一个环,再缩掉中间类似
x
|
x----x-----x
中间的那个点。
但是可能会出现一个“几”字型,重复走到了同一行。
那你在找环的时候你优先 DFS 和上一步方向相同的就可以规避共线的情形。
另一种方法是教练的,细节较少。
考虑每次删掉一个仅有一个数的行或列。
如果有空行,删掉她的同时任意删掉一个涂色点。
这样留下来的恰好是行列颜色数都等于
综上,操作次数不超过 10,复杂度