比较容易想到二分图染色,思路是算每个图最少的黑点或白点,然后总数减掉。但是WA最后一个点,求助!
#include <bits/stdc++.h>
using namespace std;
int n,m,bai,hei,cnt;
const int MAX=1005;
bool g[MAX][MAX];
int color[MAX];
void dfs(int v,int c) {
if (c==1) bai++;
else hei++;
color[v]=c;
for (int i=0;i<n;i++)
if (g[v][i]&&!color[i])
dfs(i,-c);
}
int main() {
cin>>n>>m;
for (int i=1;i<=m;i++) {
int x,y;
cin>>x>>y;
g[x][y]=1;
g[y][x]=1;
}
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
if (g[i][j]&&!color[i]) {
bai=0,hei=0;
dfs(i,1);
cnt+=min(bai,hei);
}
cout<<n-cnt<<endl;
return 0;
}