您的位置:首页 > 其它

POJ 3692 最大团

2015-05-29 17:18 190 查看
最大团=补图最大独立集

when 补图是二分图时, 最大团=补图顶点数-最大匹配

//
// main.cpp
// poj3692
//
// Created by Fangpin on 15/5/29.
// Copyright (c) 2015年 FangPin. All rights reserved.
//

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN=205;
bool vis[MAXN];
int link[MAXN];
int B,G;
int g[MAXN][MAXN];

bool dfs(int x){
for(int i=1;i<=B;++i){
if(g[x][i] && !vis[i]){
vis[i]=true;
if(link[i]==-1 || dfs(link[i])){
link[i]=x;
return true;
}
}
}
return false;
}

int hungry(){
int ans=0;
memset(link,-1,sizeof(link));
for(int i=1;i<=G;++i){
memset(vis,false,sizeof(vis));
if(dfs(i)) ++ans;
}
return ans;
}

int main(int argc, const char * argv[]) {
for(int ca=1;;++ca){
int m;
scanf("%d%d%d",&G,&B,&m);
if(G+B+m==0) break;
memset(g,1,sizeof(g));
for(int i=0;i<m;++i){
int x,y;
scanf("%d%d",&x,&y);
g[x][y]=0;
}
cout<<"Case "<<ca<<": "<<G+B-hungry()<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息