求助为什么WA?
查看原帖
求助为什么WA?
152652
AndyChen2005121楼主2021/7/25 10:41

思路是染色,自己造了几组数据都没问题...

是哪里没考虑到...?

#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
vector<int> g[10005];
int n, m;
int color[10005];
bool vis[10005];
int ans[10005], ANS = 0x3f3f3f3f;
bool dfs(int x, int c){
	color[x] = c;
	vis[x] = true;
	for(int i = 0; i < g[x].size(); i++){
		int next = g[x][i];
		if(color[next] != 0 && color[x] == color[next]) return false;
		if(!vis[next]) dfs(next, 3-c);
	}
	return true;
}
int main(int argc, char *argv[]) {
	cin >> n >> m;
	while(m--){
		int u, v;
		cin >> u >> v;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	for(int i = 1; i <= n; i++){
		memset(color, 0, sizeof(color));
		memset(vis, 0, sizeof(vis));
		if(!dfs(i,1)){
			ans[i] = 0;
		} else {
			for(int j = 1; j <= n; j++){
				if(color[j] == 1) ans[i]++;
			}
		}
		
	}
	bool flag = 0;
	for(int i = 1; i <= n; i++){
		if(ans[i] != 0) flag = true;
	}
	if(!flag){
		cout << "Impossible" << endl;
		return 0;
	}
	for(int i = 1; i <= n; i++){
		if(ans[i]) ANS = min(ANS, ans[i]);
	}
	cout << ANS << endl;
	return 0;
}
2021/7/25 10:41
加载中...