代码:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=200001;
int head[MAXN];
int c[MAXN];
int cnt=0;
int dx=0,dy=0,ans=0;
struct edg{
int nxt,to;
}edge[MAXN];
bool add(int u,int v)
{
edge[cnt].to =v;
edge[cnt].nxt =head[u];
head[u]=cnt++;
}
void dfs(int x,int fa,int col)
{
if(col==1)
dx++;
else
dy++;
for(register int i=head[x];i;i=edge[i].nxt)
{
int v=edge[i].to ;
if(v==fa)
continue;
if(c[v]==col)
{
printf("Impossible");
exit(0);
}
if(c[v]==0)
c[v]=-col;
dfs(v,x,-col);
}
}
int main()
{
int n,m;
scanf("%d %d",&n,&m);
for(register int i=1;i<=m;++i)
{
int u,v;
scanf("%d %d",&u,&v);
add(u,v);
add(v,u);
}
for(register int i=1;i<=n;++i)
{
if(c[i]==0)
{
dfs(i,0,1);
ans+=min(dx,dy);
dx=dy=0;
}
}
printf("%d",ans);
return 0;
}