行吧其实大部分内容整理在这里
这里是习题板块!
[A]
考虑将睡午觉的与 S 相连,容量为 1,不睡午觉的与 T 相连,容量为 1,有朋友关系的也相连,容量为 1。
然后跑一边最小割就完了。
[B]
首先对于第一问,显然是一个DP。
DP式子 $fi=\max{j<i,a[j]\leq a[i]}f_j+1,O(n^2)解决。
第二问,我们将之前的DP值使用上。
现进行拆点,设一个坐标为i,一个为n+i如果f_i=f_j+1说明i由j转移而来,因此要连接(n+j,i),容量为1。f_i=1/s的情况同理,只不过换成了源点与汇点。
最后注意连接(i,i+n)。
第三问我们将与1、n有关的边容量全部设为INF$ ,在残量网络上跑一边加上第二问的答案即可。
[C]
把每门课程连接的时间点连成一条链。
如果有限制情况 (a,b),就将 (a,i-1) 与 (b,i) 连起来,容量 INF,保证 a 在 b 前面被割。
然后跑一边最小割。
[D]
首先可能需要推式子,然后发现是一个最大权闭合子图的问题,将正权加起来跑最大流即可。