求助,为什么同样的,用邻接表是对的用vector存边就不对呢
查看原帖
求助,为什么同样的,用邻接表是对的用vector存边就不对呢
914775
piger楼主2023/7/28 00:42

理论上来说应该是一样的结果才对,但是第八个测试点过不了,是因为没一直返回false,但我觉得不应该啊??测试了返回false的时候输出两点,邻接表和vec存边输出的也是不一样的,求助。。。

#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
vector<int> e[10005];
int color[10005];
int n,m;
int sum[3];
bool dfs(int x,int c){
	color[x] = c;
	sum[c] ++;
	for(auto t:e[x]){
			if(!color[t]){
				dfs(t,3 - c);
			}
			else
			if(color[t] == c)
				return false;
	}
	return true;
}
int main(){
	cin >> n >> m;
	int flag = 0;
	int ans = 0;
	for(int i = 0; i < m; i ++){
		int a,b;
		cin >> a >> b;
		e[a].push_back(b);
		e[b].push_back(a);
	}
	for(int i = 1; i <= n; i ++){
		if(!color[i]){
			sum[1] = 0;
			sum[2] = 0;
			if(!dfs(i,1)){
				flag = 1;
				break;
			}
			ans += min(sum[1],sum[2]);
		}
	}
	if(flag){
		cout <<"Impossible";
	
	}
	else{
		cout << ans << endl;
	}
	
}
2023/7/28 00:42
加载中...