poj 2391 网络流 二分 最短路 拆点
首先注意边是双向边,最短路的inf要取很大
思路:增加一个源点,一个汇点,如果一个避雨点有a只奶牛,则从源点向这个点连一条边,容量为a,
如果这个避雨点能容纳b只奶牛,则从这个点向汇点连一条容量为b的边。
接着二分枚举答案,两点间最短路径的长度小于等于二分值的两个点能互相到达,连一条容量为无穷大的边
这样子建好图后求最大流会发现样例都过不了,debug过程中发现如果1->2 , 2->3,那么1就会自动联通3,实际上1,3可能不连通,所以想到把点拆成两排,如果1,2连通,就从1连一条边到2+n,这样就不会出现上面的情况了,另外,连接汇点的点变成了n+1---2*n。
敲完后果断还是WA,都快吐血了,算法应该没错,可能是大数据的问题,但应该用__int64的地方都用了啊,于是,恼火地将所有的数的数据类型都改成了__int64,果断AC,恶心shi了