dfs染色一个点过不了,有大佬帮忙看看吗
查看原帖
dfs染色一个点过不了,有大佬帮忙看看吗
1281905
L13520750667楼主2024/3/18 21:27
  • dfs,#8过不了,求勘误
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 9;
int n, m; 
vector<int> g[N];
bool vis[N]; 
int col[N];
int c1, c2;

bool dfs(int u, int sel) {
	//不用设置fa,因为有vis
	vis[u] = true;
	col[u] = sel;
	if(sel == 1)
		c1++;
	else
		c2++;
	for(int v : g[u]) {
		if(vis[v]) {
			if(col[v] == col[u])
				return false;//颜色冲突
			continue;
		}
		dfs(v, sel == 1 ? 2 : 1);
	} 
	return true;
}


signed main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	
	memset(vis, 0, sizeof(vis));
	cin >> n >> m;
	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(!vis[i]) {
			c1 = c2 = 0;
			if(dfs(i, 1)) {
				ans += min(c1, c2);
			} else {
				cout << "Impossible" << '\n';
				return 0;
			}
		}
	}
	cout << ans << '\n';
	
	return 0;
}
2024/3/18 21:27
加载中...