二分图染色法匹配板子
集合A的点染色成1,集合B的点染色成2
注意dfs返回bool
vector<int>e[maxn];
int color[maxn];
bool dfs(int u,int res){
color[u]=res;
for(int v:e[u]){
if(!color[v]){
if(dfs(v,3-res))return true;
}
else{
if(color[v]==res)return true;
}
}
return false;
}
void solve(){
int n,m;cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v;cin>>u>>v;
e[u].pb(v);e[v].pb(u);
}
bool ok=true;
for(int i=1;i<=n;i++){
if(!color[i]){
if(dfs(i,1)){
ok=false;
}
}
}
if(ok){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
}

浙公网安备 33010602011771号