poj 2289 網路流 and 二分查詢

2022-05-22 07:36:14 字數 1213 閱讀 7286

#include#include

#include

#include

#define n 2000

#define m 1000010

#define inf 1<<30

using

namespace

std;

struct

edgeedge[m];

int index[n],d[n],gap[n],e,list[n][510

];void addedge(int

from,int to,int

val)

intsource,des,n,m;

int dfs(int pos,int

flow)

if(d[v]//

找出與pos相連的點的最小標號

} }

if(lv==flow)//

沒有找到增廣路勁,進行標號更新

return flow-lv;

}int sap(int st,int

de)

return

ans;

}void

init()

//n is the number of point

intmain()

list[i][pos]=-1

; }

num=n;

n=n+m+2;//

n是點的數目,一共n+m+2個點。包括源點和匯點

int l=1,r=1000

,mid;

while(l}

for(i=1;i<=m;i++)

addedge(num+i,num+m+1

,mid);

int ans=sap(0,num+m+1

);

//coutl=mid+1,e=0

;

else

r=mid,e=0

; }

printf(

"%d\n

",l);

}return0;

}

建圖方式:

建立乙個超級源點和乙個超級匯點,由源點向每個人(編號從1->n)建立乙個流量為1的邊,從每個人向每個他從屬的組織建立一條流量為1的邊,在由每個組織建立一條流向匯點的邊,我們可以二分列舉組織向匯點邊的流量。

POJ 2289 二分 匈牙利

題意 把 n 個人分成 m 組,給出 n 個人各自可選的組別集合,求一種合法的分配方案,使得人數最多的組的人數最少 分析 最多最少,一般二分跑不了,然後求分配就匈牙利稍微變形就可以了 變形是為了適應二分 include include include include using namespace ...

poj2112 網路流 二分 floyd

描述 fj已將他的k 1 k 30 擠奶機搬到c 1 c 200 奶牛的奶牛牧場。一組不同長度的路徑在奶牛和擠奶機之間執行。擠奶機位置由id號1.k命名 奶牛位置由id號k 1.k c命名。每個擠奶點每天可以 處理 最多m 1 m 15 的奶牛。編寫乙個程式,找到每頭牛到一些擠奶機的任務,以便最遠行...

poj 2455(二分加網路流(dinic))

處理重邊,想不出什麼好的方法。只好用了前向星來寫鄰接表儲存。不是很難不多說什麼了。include include include includeusing namespace std const int maxm 80005 const int inf int max define cc m,v m...