P6054 题解
blog。网络流——最小割。
每个选手做某一套题的期望奖励固定,计算方式参考样例解释。这个假期望被去掉了。
发现是典型的「\(m\) 种强制选一」问题。考虑每个人都建一条链,跑最小割,每条链必定割 \(\ge1\) 条边,割哪条边就表示选哪套题。
对于大小关系的限制,例如 \((i,j,k)=(1,2,1)\),那么不能同时割 \(\text{cut}_{1,x}\) 与 \(\text{cut}_{2,y}\)(\(x-y\le1\))。限制这种割法仍能够流到汇点即可。
不得不割掉 INF 边时无解,判最终流量即可。注意 Dinic 开 double
,判一下浮点数误差,正常实现都可以......拿到 \(80\) 分。
怎么会是呢?原来会存在一条链割掉多条边(一个人做几套题)的情况。不需要像其他题解一样建反向边,只需要为每条边加一个 \(+\infty^*\),最后减掉 \(n\times\infty^*\) 即可。
code,时间复杂度 \(O(\text{能过})\)。