poj 3692 二分图最大匹配

思路:

如果我们将认识的建边,求最大独立集就是互相不认识的人数。那么我们反过来,将不认识的建图,求最大独立集就是互相认识的人数。

#include<cstdio>

#include<iostream>

#include<cstring>

#include<algorithm>

#define Maxn 210

int graphic[Maxn][Maxn],vi[Maxn],match[Maxn],n,m;

int dfs(int u)

{

    int i;

    for(i=1;i<=m;i++)

    {

        if(!vi[i]&&graphic[u][i])

        {

            vi[i]=1;

            if(match[i]==-1||dfs(match[i]))

            {

                match[i]=u;

                return 1;

            }

        }

    }

    return 0;

}

int main()

{

    int i,j,k,Case=1,a,b;

    while(scanf("%d%d%d",&n,&m,&k),n||m||k)

    {

        memset(match,-1,sizeof(match));

        memset(graphic,1,sizeof(graphic));

        for(i=1;i<=k;i++)

        {

            scanf("%d%d",&a,&b);

            graphic[a][b]=0;

        }

        int ans=0;

        for(i=1;i<=n;i++)

        {

            memset(vi,0,sizeof(vi));

            if(dfs(i))

                ans++;

        }

        printf("Case %d: %d\n",Case++,n+m-ans);

    }

    return 0;

}

 

你可能感兴趣的:(poj)