hdu 1669 二分 多重匹配)

2021-06-22 05:41:43 字數 919 閱讀 8118

思路:由於要求minimize the size of the largest group,由此我們想到二分列舉,然後每一次求一下多重匹配就可以了。

1 #include2 #include3 #include4 #include5 #include6

using

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 }

view code

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...