专栏文章

题解:P9731 [CEOI 2023] Balance

P9731题解参与者 33已保存评论 35

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
35 条
当前快照
1 份
快照标识符
@miqb4qqk
此快照首次捕获于
2025/12/04 01:55
3 个月前
此快照最后确认于
2025/12/04 01:55
3 个月前
查看原文
不用欧拉回路的做法来了,轻松拿下最优解。
模拟赛考了,赛时想到一个巧妙的二染色做法,可惜没想到分治。
考虑 S=2S=2 怎么做,不同行的相同颜色(相同题目,下同)两两一组,要求一个出现在第一列,另一个出现在第二列,这样组内贡献抵消,就能保证两列出现次数之差不超过 11(最后最多剩下一个,随便怎么分组都行),实现就是组内两个点(也就是对应的两行)之间连一条有权边(0/10/1 表示翻转情况相同或只翻转一个)。然后跑一遍染色就做完了。
是不是听起来很厉害,考虑证明(,*,* 表示一行数,a,b,x,ya,b,x,y 互不相同):
  • a,ba,bx,yx,y 肯定没有连边,一定没有问题。
  • x,yx,yx,yx,y 连一条边就消没了。
  • x,ax,ax,bx,b 连一条边,其实就相当于合并成了一个 a,ba,b
就分讨完了,不会出现奇环的。
然后分治一下,把每行两两一对拆开,跑前面的染色,使得同色在第一列和第二列出现的次数之差不超过 11,然后把第一列的都放到原来那一行的前面一半,第二列的放到后面一半,分治下去就行了。证明类似线段树同一层的节点长度只差不超过 11
染色可以手写队列跑 BFS,目前还是最优解。

评论

35 条评论,欢迎与作者交流。

正在加载评论...