标签:二分匹配
//g个girl , b个boy , gril都被彼此认识,boy也彼此认识
//有的girl和boy也彼此认识
//问最多能选出多少人,这些人都彼此认识
//对陌生人建立一个图
//那么其最大独立集就是最多的彼此认识的人
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std ;
const int maxn = 210 ;
int map[maxn][maxn] ;
int g , b , m;
int match[maxn] , vis[maxn] ;
int find(int st)
{
for(int i = 1;i <= b;i++){
if(!vis[i] && !map[st][i]){
vis[i] = 1 ;
if(match[i] == -1 || find(match[i])){
match[i] = st ;
return true ;
}
}
}
return false ;
}
int main()
{
int cas = 0;
while(scanf("%d%d%d" , &g , &b ,&m) &&(g+b+m))
{
memset(match , -1 , sizeof(match)) ;
memset(map, 0 , sizeof(map)) ;
for(int i = 1 ;i <= m;i++)
{
int u ,v ;
scanf("%d%d" , &u , &v) ;
map[u][v] = 1;
}
int ans = 0 ;
for(int i = 1;i <= g;i++)
{
memset(vis , 0 , sizeof(vis)) ;
if(find(i))
ans++ ;
}
printf("Case %d: " , ++cas) ;
cout<<g+b-ans<<endl;
}
return 0 ;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
poj3692Kindergarten 二分匹配之最大独立集
标签:二分匹配
原文地址:http://blog.csdn.net/cq_pf/article/details/47321443