求助,染色法
查看原帖
求助,染色法
998650
OTH_chinese_dragon楼主2024/8/10 16:27
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int cnt0,cnt1;
vector <int> G[N];
int c[N];
bool w=0;
void dfs(int u){
	if(c[u]==0){
		cnt0++;
	}
	if(c[u]==1){
		cnt1++;
	}
	for(int i = 0;i < G[u].size(); i++){
		int v = G[u][i];
		if(c[v]==-1){
			if(c[u]==1){
				c[v]=0;
			}else{
				c[v]=1;
			}
			dfs(v);
		}else{
			if((c[u]==1&&c[v]==1)||(c[u]==0&&c[v]==0)){
				w=true;
				return;
			}
		}
	}
	
}
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1; i<=n; i++){
		c[i]=-1;
	}
	for(int i=1; i<=m; i++){
		int u,v;
		cin>>u>>v;
		G[u].push_back(v);
		G[v].push_back(u);
		
	}
	int ans=0;

	for(int i=1; i<=n; i++){
		if(c[i]==-1){
			cnt0=0;
			cnt1=1;
			dfs(i);
			if(w){
				cout<<"Impossible";
				return 0;
			}
			ans+=min(cnt0,cnt1);
		}
	}
	cout<<ans;
	return 0;
} 
2024/8/10 16:27
加载中...