您的位置:首页 > 其它

poj 1469 COURSES 二分图最大匹配

2014-11-13 13:12 411 查看
题意:

裸的二分图最大匹配。

思路:

解二分图最大匹配的匈牙利算法的模板题。

代码:

//poj 1469
//sepNINE
#include<iostream>
using namespace std;
const int maxN=400; 

int M,v1,v2;
bool g[maxN][maxN];
bool vis[maxN];
int link[maxN];

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

void hungary()
{
	for(int x=1;x<=v1;++x){
		memset(vis,false,sizeof(vis));
		if(dfs(x))
			++M;
	}	
	return ;
}

int main()
{
	int cases,p,n;
	scanf("%d",&cases);
	while(cases--){
		memset(g,false,sizeof(g));
		memset(link,0,sizeof(link));
		scanf("%d%d",&p,&n);		
		int i;
		for(i=1;i<=p;++i){
			int x,y;
			scanf("%d",&x);
			while(x--){
				scanf("%d",&y);
				g[i][y]=1;
			}
		}
		M=0;
		v1=p;
		v2=n;
		hungary();
		if(M==p)
			printf("YES\n");
		else
			printf("NO\n");
	}
	return 0;	
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: