思路是染色,自己造了几组数据都没问题...
是哪里没考虑到...?
#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;
}