思路:由於要求minimize the size of the largest group,由此我們想到二分列舉,然後每一次求一下多重匹配就可以了。
1 #include2 #include3 #include4 #include5 #include6view codeusing
namespace
std;
7#define maxn 1010
8#define maxm 555
9 vectorvet[maxn];
10bool
map[maxn][maxn];
11int link[maxm];//
i當前的匹配數
12int vlink[maxm][maxn];//
與i匹配的第j個匹配的數k
13bool mark[maxm];//
標記已匹配的
14int
n,m,limit,ans;
1516
bool dfs(int
u)17
27for(int j=0;j)32}
33}34}
35return
false;36
}3738bool
match()
3946
return
true;47
}4849int
main()
5062}63
int low=0,high=n;
64while(low<=high)else
70 low=limit+1;71
}72 printf("
%d\n
",ans);73}
74return0;
75 }
hdu1669 二分多重匹配 二分
n個人分成m組,求人數最多的那一組人數的最小值。每個人肯定只能匹配乙個組,但乙個組可以匹配多個人,因此屬於多重匹配。我們設定乙個limit,表示每組最多能容納的人數。在dfs u 尋找u的匹配時,如果某一組vv的人數小於limit,那麼可以把u和vv匹配,vv已經匹配的人數 1。否則,當人數已經達到...
二分多重匹配模板
以poj 2289 為例。include include include include include include include using namespace std const int maxn 1010 const int maxm 1010 510 struct edge edge ...
POJ 3189(二分多重匹配)
題意 有n頭牛,b個穀場,牛對每個穀場的喜愛都有不同的排名,每個穀場承受牛的上限,然後求這些放置後這些牛對這些穀場的排名範圍大小最小。題解 二分範圍大小mid,然後求每個範圍牛是否能否多重匹配成功即可。include include include includeusing namespace st...