二分多重匹配模板

2021-06-16 09:56:17 字數 878 閱讀 6721

以poj 2289 為例。

#include #include #include #include #include #include #include using namespace std;

const int maxn = 1010;

const int maxm = 1010*510;

struct edge

edge[maxm];

int nx, ny; //nx為左集合數目,ny為右集合數目

int cnt;

int limit; //表示每個右集合頂點最多匹配的左集合頂點個數,也可能為陣列

int first[1010];

bool vis[1010]; //尋找增廣路徑時的標記陣列

int vylink[1010]; //表示右集合i頂點分配到左集合的頂點數

int ylink[510][1010]; //表示與右集合i頂點匹配的第j個元素

void init()

void read_graph(int u, int v)

int find(int u)

for(j = 0; j < vylink[i]; j++)

if(find(ylink[i][j]))

}} return 0;}

bool mulmatch()

return 1;

}void bsearch()

printf("%d\n", x);

}void read_case()

read_graph(i, v);

} }}void solve()

int main()

return 0;

}

hdu1669 二分多重匹配 二分

n個人分成m組,求人數最多的那一組人數的最小值。每個人肯定只能匹配乙個組,但乙個組可以匹配多個人,因此屬於多重匹配。我們設定乙個limit,表示每組最多能容納的人數。在dfs u 尋找u的匹配時,如果某一組vv的人數小於limit,那麼可以把u和vv匹配,vv已經匹配的人數 1。否則,當人數已經達到...

hdu 1669 二分 多重匹配)

思路 由於要求minimize the size of the largest group,由此我們想到二分列舉,然後每一次求一下多重匹配就可以了。1 include2 include3 include4 include5 include6 using namespace std 7 define ...

POJ 3189(二分多重匹配)

題意 有n頭牛,b個穀場,牛對每個穀場的喜愛都有不同的排名,每個穀場承受牛的上限,然後求這些放置後這些牛對這些穀場的排名範圍大小最小。題解 二分範圍大小mid,然後求每個範圍牛是否能否多重匹配成功即可。include include include includeusing namespace st...