IOI2020 集训队作业¶
AGC029F¶
题意¶
给定
题解¶
考虑一个必要条件:
建立一个二分图,左边是所有点,右边是
个集合。 那么对于任意一个右边点的子集
,左边与 中点有边相邻的数量 。否则,考虑这些集合所组成的边,点数不超过 ,那么必然成环。 显然,由 Hall 定理,这个图的最大匹配为
。
容易证明,这也是充分条件:
考虑如下类似 bfs 的操作:将与根节点相连的所有集合拿出来,各自找到其匹配点,将他们都当作根节点的儿子;接下来将这些点相连的且之前没被选过的集合拿出来,重复上述操作,再将各匹配点当作各自节点的儿子。
如果最终能遍历到所有点,则这是一个合法的构造方案。
否则,说明有些点遍历不到。注意到总点数左边比右边多一个,且遍历到的点也是左边比右边多一个,因此没遍历的点左右数量相同。选取右边的没遍历的点作为
,则左边与 中点有边相邻的数量 ,矛盾。
跑 dinic 后求最大匹配,再进行上述所说的 bfs,如果能遍历所有点则合法,时间复杂度为
AGC030C¶
题意¶
构造一个
题解¶
考虑每行填相同的数,显然合法,但是
乍一看老对了,实则不然,考虑交替填数的行必然与只填一个数的行有相邻,那么只填一行数这一行上的数就不符合条件了。
正解为,改为一个对角线填一个数,然后再选一些对角线交替填两种数。这其实利用了 不需要每个方向上的数都完全相同 这一性质。
AGC030D¶
题意¶
给定一个长度为
题解¶
设
AGC030E¶
题意¶
给定两个长度为
题解¶
考虑对于一个符合条件的
每次翻转一个字符等价于,移动一条边,或是将最左/最右的边删掉。
我们可以假设第一个字符左边和最后一个字符右侧还有无数条红蓝边,可以用一次操作将其移动到串上。那么枚举从左边移动出来多少条边,
很坑的一点,当
AGC030F¶
题意¶
对于一个
题解¶
设所有
考虑从大到小填每个数,这样每填一个数后状态是唯一确定的。设