題意:一共有n個城市,一些城市裡有金礦,一些城市裡有倉庫,金礦和倉庫都有乙個容量,有m條邊,每條邊是雙向的,有乙個權值,求將所有金礦裡的儲量都運送到倉庫中,所需要經過的道路中,使最大的權值最小
思路:增設乙個超級源點和乙個超級匯點,源點與每乙個城市相連,容量為**數量,匯點與倉庫相連,容量為倉庫的容量,然後就是二分最小的最大相鄰距離,跑最大流驗證。
#include#includeconst int n=410;
const int inf=0x3fffffff;
int dis[n],gap[n],head[n],num,start,end,ans,n,m;
int v1[n],v2[n];
struct edge
e[210000];
struct node
p[100000];
void addedge(int x,int y,int w)
int dfs(int u,int minflow)
min_dis=min_dis>dis[v]?dis[v]:min_dis;
} }if(flow==0)
return flow;
}int isap()
scanf("%d",&m);
for(i=0;i
POJ3228二分最大流
題意 有n個點,每個點有兩個權值,金子數量還有倉庫容量,金子可以存在自己的倉庫裡或者是別的倉庫裡,倉庫和倉庫之間有距離,問所有金子都必須存到庫里最大距離的最小是多少?思路 比較簡單,方法也不唯一,大體可以這樣,先二分,然後用最大流或者匹配.來判斷是不是滿足就行了,我用的是二分最大流,具體 在下面。i...
poj 3228 二分 最大流 dinic
有n座town 每座town都有一定數量gold和倉庫 倉庫的容量是有限的 有m條雙向路徑 求把所有的gold 運到倉庫最小的最大距離是多少 思路 增設乙個超級源點和乙個超級匯點,源點與每乙個gold相連,容量為gold數量,匯點與倉庫相連,容量為倉庫的容量,然後就是二分最小的最大相鄰距離,跑最大流...
hdu 3277 二分 並查 最大流
題意 和3081差不多 只是多了乙個條件,每個女生可以選最多k個不喜歡的男生匹配 思路 將每個女孩u分為u1,u2,若u喜歡v則加一條u1到v的邊 容量為1 否則加一條u2到v的邊,容量為1 令加u1到u2的容量為k的邊 其他同3081一樣 源點到每個女生連容量為x的邊,男生到匯點連容量為x的邊,x...