首先对于一对限制
(x,y),形象来说就是能不能将
ax,ay 与
bx,by 配对,使得
ax≥btox,
ay≥btoy。也即
min(ax,ay)≥min(bx,by),
max(ax,ay)≥max(bx,by)。即两个数都
≥min(bx,by),至少有一个数
≥max(bx,by)。于是就可以首先把
ax,ay 对
min(bx,by) chkmax。
现在的限制就是
ax,ay 至少有一个
≥max(bx,by)。考虑最小割:我们尝试把每个点拆成
pi,j。对于每个点,其与
S 连通时,
ai≥j。当加边
(pi,v1,pj,v2,∞) 时,则有限制:当
ai≥v1 时,
aj≥v2。整张图额外连接
(pi,v1,pi,v1+1,pi,v1−ai0),即确立选择一个权值的代价。连接
(pi,v1+1,pi,v1,+∞) 以避免一条链上割两个点。
但是本题需要的约束可是
ai<v1 时,
aj≥v2。方向是反的。
要解决这个问题,你需要有一个惊人的注意力:如果
ax≥bx 并且
ay≥by 的话不用管。在调整过后,不会有
ax<bx 且
ay<by 的情况。所以我们考虑的所有点对都形如
ax<bx 且
ay≥by 的情况。发现
ax 与
bx 的大小关系本身就能将所有数分成两个确定的集合,这不是二分图吗?
考虑把所有
ax<bx 的点倒过来,即把
px,v 看成是
[ax<v]。则一个连边
(px,v1,py,v2,+∞) 则为如果
ax<v1,那么
ay≥v2。非常契合限制。
跑一遍最小割即可。