染色以后分别统计两种颜色为什么会错啊
查看原帖
染色以后分别统计两种颜色为什么会错啊
114671
xiaoql楼主2023/12/15 16:32
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+1000;
int n,m,head[N],edg[N],nxt[N],tot,v[N],cnt1,cnt2,ans;
void add(int u,int v){
	edg[++tot]=v;
	nxt[tot]=head[u];
	head[u]=tot;
}
bool dfs(int x,int color){
	v[x]=color;
//	if(color==1)cnt1++;
//	else cnt2++;
	for(int i=head[x];i;i=nxt[i]){
		int y=edg[i];
		if(!v[y]){
			if(!dfs(y,3-color))return false;
		}
		else{
			if(v[y]==color)return false;
		}
		
	}
	return true;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int a,b;
		scanf("%d%d",&a,&b);
		add(a,b);
		add(b,a);
	}
	for(int i=1;i<=n;i++){
		if(!v[i]){
		//	cnt1=cnt2=0;
			if(!dfs(i,1)){
				cout<<"Impossible\n";
				return 0;
			}
		//	ans+=min(cnt1,cnt2);
		}
		
	}
	
	for(int i=1;i<=n;i++){
		if(v[i]==1)cnt1++;
		if(v[i]==2)cnt2++; 
	}
	cout<<min(cnt1,cnt2);
	return 0;
} 
2023/12/15 16:32
加载中...