題意 : 和3081差不多;只是多了乙個條件,每個女生可以選最多k個不喜歡的男生匹配 ;
思路:將每個女孩u分為u1,u2,若u喜歡v則加一條u1到v的邊 ,容量為1 ,否則加一條u2到v的邊,容量為1 令加u1到u2的容量為k的邊;其他同3081一樣; 源點到每個女生連容量為x的邊,男生到匯點連容量為x的邊, x是列舉的輪數;
注意,二分列舉的時候,不能衝新建圖,這樣毀tle ,只修改要修改的那一部分 ;
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std ;
const int n=1000;
const int m=500000;
struct node1
;struct node2
;node1 e[m],e[m];
node2 ee[m];
int n,m,f,k,top,p;
int head[n],cur[n],gap[n],pre[n],dis[n],fa[n];
int mm[n][n];
int find(int x)
void add(int u ,int v ,int c )
int work(int s,int t ,int nv)
}for( i = s ; i!=t ; i = e[cur[i]].v)
u=neck;
max_flow += cur_flow ;
}for( i = cur[u] ; i != -1 ; i = e[i].next)
if(i!=-1)
else
chushi(t); //初始化網路
int l = 0 , r = n , ans=0;
while(l<=r)
else
r=mid-1;
}cout << ans << endl ;
}return 0;
}
hdu3081 二分 並查集 最大流
題意 有n個女孩,n個男孩,對於每個女孩有幾個沒有爭吵過的男孩,每個女孩有幾個朋友 都是女孩 對於沒有爭吵過的男孩可以建立關係。這樣就可以進行一次遊戲,那麼下一次可以選擇乙個之前沒有選擇過的人建立關係。那麼求最多能進行多少次關係。思路 對於朋友關係,很容易想到用並查集維護,那麼在乙個集合中所連的邊都...
hdu 3228 最大流 二分
題意 一共有n個城市,一些城市裡有金礦,一些城市裡有倉庫,金礦和倉庫都有乙個容量,有m條邊,每條邊是雙向的,有乙個權值,求將所有金礦裡的儲量都運送到倉庫中,所需要經過的道路中,使最大的權值最小 思路 增設乙個超級源點和乙個超級匯點,源點與每乙個城市相連,容量為 數量,匯點與倉庫相連,容量為倉庫的容量...
poj 2112 最大流 二分
題意 有k臺擠奶機,c頭奶牛,給出這k c個實體間的距離,求出每頭奶牛都到一台擠奶機去,怎麼分配使奶牛走的最大距離最小。用二分列舉最大距離,include include define n 500 define inf 0x3fffffff int map n n dis n gap n head ...