poj1469(二分图匹配)

链接:https://cn.vjudge.net/contest/158150#problem/A

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;

int link[305][305],used[305],visd[305],res,t,n,p,k,x;

int er_fen(int p){
	for(int i = 1;i<=n;++i){
		if(link[p][i] == 1&&visd[i] == 0){
			visd[i] = 1;
			if(used[i] == -1||(er_fen(used[i]) == 1)){
				used[i] = p;
				return 1;
			}
		}
	}
	return 0;
}

void solve(){
	for(int i = 1;i<=p;++i){
		memset(visd,0,sizeof(visd));
		if(er_fen(i) == 1) ++res;
	}
}

int main(){
	cin>>t;
	while(t--){
		cin>>n>>p;
		for(int i = 1;i<=300;++i){
			used[i] = -1;
			for(int j = 1;j<=300;++j){
				link[i][j] = 0;
			}
		}
		for(int i = 1;i<=p;++i){
			cin>>k;
			for(int j = 0;j<k;++j){
				cin>>x;
				link[i][x] = 1;
			}
		}
		res = 0;
		solve();
		if(res == p)
		cout<<"YES\n";
		else
		cout<<"NO\n";
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/dukig/article/details/89318771