HDU 1068 Girls and Boys (二分圖匹配---最大獨立集)

題目:Girls and Boys

題意:有N個學生,已知每個學生與其他人的romantic關係,問有多少人沒這個關係。

            注:只有男生和女生可能有romantic關係。

分析:男生和女生分別爲兩個點集。此題實質爲求最大獨立集。

           最大獨立集=頂點數-最大匹配數。(此題由於給出的是每個學生的romantic關係,

           所以最大匹配數要除2)   

           二分圖中的邊都是 單向的


代碼:

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;

int g[1010][1010];
int vis[1010];
int match[1010];
int n;

bool dfs(int u)
{
    int i;
    for(i=0;i<n;i++)
    {
        if(g[u][i] && !vis[i])
        {
            vis[i]=true;
            if(match[i]==-1||dfs(match[i]))
            {
                match[i]=u;
                return true;
            }
        }
    }
    return false;
}

int main()
{
    int i,j,cnt,a,b,m;
    while(scanf("%d",&n)!=EOF)
    {
        memset(g,0,sizeof(g));
        memset(match,-1,sizeof(match));
        for(i=0;i<n;i++)
        {
            scanf("%d: (%d)",&a,&b);
            for(j=0;j<b;j++)
            {
                scanf("%d",&m);
                g[a][m]=true;
            }
        }
        cnt=0;
        for(i=0;i<n;i++)
        {
            memset(vis,0,sizeof(vis));
            if(dfs(i))
                cnt++;
        }
        printf("%d\n",n-cnt/2);
    }
    return 0;
}



發佈了96 篇原創文章 · 獲贊 13 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章