您的位置:首页 > Web前端

[HDU2458] Kindergarten [2008 Asia Hefei Regional Contest Online C]

2016-07-26 09:31 453 查看

题意

有一堆男孩和女孩,男孩和男孩之间,女孩和女孩之间互相认识,给出一堆男孩女孩之间认识的关系,问最多能邀请几个人去party,(邀请人之间互相直接认识)。

题解

最大团=补图最大独立集。补图显然为二分图,最大独立集就求一次最大匹配即可。

代码

/****************************************\
* Author : ztx
* Title  : C - Kindergarten
* ALG    : er fen tu
* CMT    : g++  I64d
* Time   :
\****************************************/

#include <cstdio>
#define Rep(i,l,r) for(i=(l);i<=(r);i++)
#define rep(i,l,r) for(i=(l);i< (r);i++)
#define Rev(i,r,l) for(i=(r);i>=(l);i--)
#define rev(i,r,l) for(i=(r);i> (l);i--)
typedef long long ll ;
typedef double lf ;
int CH , NEG ;
template <typename TP>inline void read(TP& ret) {
ret = NEG = 0 ; while (CH=getchar() , CH<'!') ;
if (CH == '-') NEG = true , CH = getchar() ;
while (ret = ret*10+CH-'0' , CH=getchar() , CH>'!') ;
if (NEG) ret = -ret ;
}
template <typename TP>inline void readc(TP& ret) {
while (ret=getchar() , ret<'!') ;
while (CH=getchar() , CH>'!') ;
}
template <typename TP>inline void reads(TP *ret) {
ret[0]=0;while (CH=getchar() , CH<'!') ;
while (ret[++ret[0]]=CH,CH=getchar(),CH>'!') ;
ret[ret[0]+1]=0;
}

#include <cstring>

#define  maxn  210LL

int kiss = 0 , G , B , M ;
bool map[maxn][maxn] ;
int xy[maxn] , yx[maxn] ;
bool vis[maxn] ;

bool find(int u) {
int v ;
for (v = 1 ; v <= B ; v ++ )
if (!vis[v] && !map[u][v])
if (vis[v] = true ,  !yx[v] || find(yx[v])) {
yx[v] = u , xy[u] = v ;
return true ;
}
return false ;
}

void solve() {
int i , ans = 0 ;
memset(xy , 0 , sizeof xy) ;
memset(yx , 0 , sizeof yx) ;
Rep (i,1,G) if (!xy[i]) {
memset(vis , 0 , sizeof vis) ;
ans += find(i) ;
}
printf("Case %d: %d\n", kiss , G+B-ans) ;
}

int main() {
int i , j , u , v ;
//    #define READ
#ifdef  READ
freopen(".in" ,"r",stdin ) ;
freopen(".out","w",stdout) ;
#endif
while ( ++ kiss) {
read(G) , read(B) , read(M) ;
if (G+B+M == 0) break ;
memset(map , 0 , sizeof map) ;
Rep (i,1,M)
read(u) , read(v) , map[u][v] = true ;
solve() ;
}
#ifdef  READ
fclose(stdin) ; fclose(stdout) ;
#else
getchar() ; getchar() ;
#endif
return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: