POJ3692【二分匹配】

来源:互联网 发布:公交数据库下载 编辑:程序博客网 时间:2024/05/17 07:14

题意:
有男生女生,男生都认识双方,女生都认识双方,给出一些男女关系,问最大拿多少个人,使得所有人都认识双方。
思路:
原图最大团=总结点数-[【补图(补图为二分图)】的最大独立集=最大完全子图的顶点数];
//#include<bits/stdc++.h>#include<cstdio>#include<string.h>#include<algorithm>using namespace std;typedef long long LL;const int N=2e2+10;bool ma[N][N];int n,m,e;int cx[N],cy[N];bool vis[N];bool FindPath(int u){    for(int v=1;v<=m;v++)    {        if(ma[u][v]&&!vis[v])        {            vis[v]=true;            if(cy[v]==-1||FindPath(cy[v])){                cx[u]=v;                cy[v]=u;                return true;            }        }    }    return false;}int MinPoint(){    int res=0;    memset(cx,-1,sizeof(cx));    memset(cy,-1,sizeof(cy));    for(int i=1;i<=n;i++){        if(cx[i]==-1)        {            memset(vis,0,sizeof(vis));            res+=FindPath(i);        }    }    return res;}int main(){    int cas=1;    while(~scanf("%d%d%d",&n,&m,&e))    {        if(!n&&!m&&!e) break;        int u,v;        memset(ma,true,sizeof(ma));        while(e--)        {            scanf("%d%d",&u,&v);            ma[u][v]=false;        }        printf("Case %d: %d\n",cas++,n+m-MinPoint());    }    return 0;}


0 0
原创粉丝点击