hdu 2063

http://acm.hdu.edu.cn/showproblem.php?pid=2063

第一个二分图。裸二分图。

View Code
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<stdlib.h>
using namespace std;
const int maxn = 501;
int as[maxn][maxn];
int vis[maxn],to[maxn];
int k,n,m;
int dfs(int x)
{
        int i;
        for(i = 1; i <= m; ++ i)
        {
                if(!as[x][i]||vis[i])continue;
                vis[i] = 1;
                if(to[i]==-1||dfs(to[i]))
                {
                        to[i] = x;
                        return 1;
                }
        }return 0;
}
int main()
{
        int i,j,s,t,ans;
        while(scanf("%d",&k)==1)
        {
                if(!k)break;
                scanf("%d %d",&n,&m);
                memset(to,-1,sizeof(to));
                memset(as,0,sizeof(as));

                for(i = 0; i < k; ++ i){
                        scanf("%d %d",&s,&t);
                        as[s][t] = 1;
                }
                ans = 0;
                for(i = 1; i <= n; ++ i){
                        memset(vis,0,sizeof(vis));
                        if(dfs(i)) ans++;
                }
                printf("%d\n",ans);
        }return 0;
}

 

posted on 2012-06-20 13:19  aigoruan  阅读(144)  评论(0)    收藏  举报

导航