icpc南昌2019 A.9102
题意是维护一个带删除操作的可持久化并查集,但不会实现,于是看题解考虑离线操作,解决完一个儿子就回溯操作
注意到离线仍需要带删除操作的并查集,所以需要虚根来实现
一开始操作数组开大了N*30爆MLE,后来因为答案要求的是Yes和No,而打的是YES和NO给了几发WA
1 | const int N = 1e6 + 86; |
题意是维护一个带删除操作的可持久化并查集,但不会实现,于是看题解考虑离线操作,解决完一个儿子就回溯操作
注意到离线仍需要带删除操作的并查集,所以需要虚根来实现
一开始操作数组开大了N*30爆MLE,后来因为答案要求的是Yes和No,而打的是YES和NO给了几发WA
1 | const int N = 1e6 + 86; |
题意为给定一个二分图,左右点数均为n,并给定左右相连的边,对这些边两端点
现给定你一些限制条件并要求你选定一些点及其边,使得右边的点全部被覆盖到
状态压缩dp:
设以数组dp[i][j]其中
1 | vi v[20], m(30); |
考虑到问题
能使最多顾客满意呢
所以我们应以客人为主要限制目标,所以将其放中间,两边各连房间和菜,于是便可转化为最大流问题
建图应注意到客人只要一个,所以对每个客人应建两点,相连的权值为1,左边点与房间相连,右边点与菜相连
1 | const int N = 2e5 + 86; |
对于同意午睡的,源点到该点权值为1,该点到源点权值为0.
而对于好朋友,则两点建立双向边,权值均为1
对于多对好朋友冲突,我们贪心地取最少的那一边使得总冲突数最少,对于此即为最小割最大流。
1 | const int N=5e5+86; |
最大流问题,建图时注意每排座位有两人
1 | const int N=2e4+86; |