Codeforces Gym 100783D Book Club(匈牙利算法)

【题意】

给N个人,每个人带来一本书同他人交换,给出M条要求包含A、B,意为编号为A的人想要换到编号为B的人的书。问是否能够满足每一个人?(2 <= N <= 10000,1 <= M <= 20000,且M <= N²-N)


【思路】

当然是满足的人越多越好,由于可能存在环形换书的情况,我们应该争取让他们都拿到书。构造二分图的左右块,点的编号都为1到N,对于要求A、B,将左边的A和右边的B连接起来,再求该二分图的最大匹配,如果最大匹配等于人数N,那么答案为是,反之即否。


【代码】

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

const int MAXN=10005;

int n,m;
bool visited[MAXN];
int xmatch[MAXN],ymatch[MAXN];
vector connect[MAXN];

bool dfs(int u)
{
    for(int i=0;i


你可能感兴趣的:(匈牙利算法)