2014 UESTC Training for Graph Theory L

来源:互联网 发布:淘宝汽车装饰安装联盟 编辑:程序博客网 时间:2024/05/01 06:14
二分匹配 主要是匈牙利算法查找增广路
如果找到增广路ans++

套匈牙利模板就可以了

#include <map>#include <set>#include <list>#include <cmath>#include<cctype>#include <ctime>#include <deque>#include <stack>#include <queue>#include <cstdio>#include <string>#include <vector>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>#define LL long long#define PI 3.1415926535897932626using namespace std;int gcd(int a, int b){return a % b == 0 ? b : gcd(b, a % b);}#define MAXN 1005int N,M,K;bool vis[MAXN];int link[MAXN];int G[MAXN][MAXN];bool dfs(int x){    for (int i=1;i<=M;i++)        if (!vis[i]&&G[x][i])    {        vis[i]=true;        if (!link[i]||dfs(link[i]))        {            link[i]=x;            return true;        }    }    return false;}int main(){    //freopen("sample.txt","r",stdin);    while (scanf("%d%d",&N,&M)!=EOF)    {        int ans=0;        memset(link,false,sizeof(link));        memset(G,0,sizeof(G));        scanf("%d",&K);        int a,b;        for (int i=0;i<K;i++)        {            scanf("%d%d",&a,&b);            G[a][b]=1;        }        for (int i=1;i<=N;i++)        {            memset(vis,0,sizeof(vis));            if (dfs(i)) ans++;        }        printf("%d\n",ans);    }    return 0;}


0 0