题意:
给你n个人,m场比赛,x个好人,y个坏人,对于每一场比赛,必有一个好人一个坏人,问是否能将n个人完全区分成好坏人。
思路:
并查集或二分图匹配
对于已经确定的好人和坏人先行进行归类,bfs搜一遍即可。
对于剩下未确定阵营的人随机选取一个人归为好人或坏人bfs再搜一遍。
若两次bfs中出现同一人被分为不同阵营的情况 或 两次bfs后仍有未分配阵营的人 return NO;
否则 return YES;
代码:
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e5+100;
int color[MAXN];
vector <int> edge[MAXN];
queue <int> que;
int n,m,a,b,temp,st;
bool solve(){
int left=n-a-b,now;
while(!que.empty()){
now=qu