理论上来说应该是一样的结果才对,但是第八个测试点过不了,是因为没一直返回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;
}
}