跟上題一樣,因為一開始那份模板用的少,總懷疑那份sap模板出錯了,今天換了乙個模板做另外一題很像的題。(先前的模板不能處理過大的數)
事實證明我過程中處理錯了,好吧,先放著,校賽完在來找錯了。
最後在錯誤在建圖的過程中,嚴格建圖過程,因為增加了牛與牛和機器與機器的距離,導致求最大流結果時出錯。
**:
#include#include#include#define maxn 405#define inf 1e8
#define min(a,b) (ab?a:b)
using namespace std;
struct edge
e[200000];
int head[maxn],ecnt;
int gap[maxn],cur[maxn],pre[maxn],dis[maxn];
int map[300][300];
int l,r,mid;
int n,m,scr,sink,vn,num;
int k,c1,m;
void floyd()
}}void insert(int u,int v,int w)
int sap(int s,int t,int n)//核心**(模版)
gap[s]=n;
bool flag;
while(dis[s]0&&dis[u]==dis[v]+1)
aug=inf;
}break;//找到一條就退出}}
if(flag) continue;
int mindis=n;
for(i=head[u];i!=-1;i=e[i].next)
int main()
}scr=0;sink=k+c1+1;vn=sink+1;
floyd();
/*for(int i=1;i<=k+c1;i++)
l=0;r=0;mid=0;
r=tmp;
//cout<>1;
if(judge(mid)) //大了
else l=mid+1;
//cout<}
printf("%d\n",r);
}return 0;
}
poj 2112 最大流 二分
題意 有k臺擠奶機,c頭奶牛,給出這k c個實體間的距離,求出每頭奶牛都到一台擠奶機去,怎麼分配使奶牛走的最大距離最小。用二分列舉最大距離,include include define n 500 define inf 0x3fffffff int map n n dis n gap n head ...
poj2112 二分最大流
題目 輸入k c m 代表有k臺機器 c頭牛 每台機器最多服務m頭牛 k臺機器編號為1 k。c頭牛編號為k 1 k c 下面是乙個 k c k c 的矩陣 map i j 代表從編號為i的實體到編號為j的實體的直接距離 問你要讓每頭牛都被機器服務 這c頭牛中 走的最遠距離的最小值 就是說這c頭牛每頭...
POJ 2112 二分 最大流
題意 有k個牛奶機跟c頭牛。他們之間有路相連,農民想讓每個牛能到其中乙個牛奶機,又想讓走路最遠的牛走得最小。題解 求最大值最小,不出意外就是二分了 由於要限制總的路徑長度,就不能對每條邊限制了,於是先floyd求最短路,再二分最長路即可 不連大於二分值的路徑,連小於等於二分值的路徑,做最大流就好了 ...