#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int map[202][202];
int link[202];
int vis[202];
int n,m;
bool flag;
int c[202];
void check(int i,int m)
{
if(flag)return;
for(int j=1;j<=n;j++)
{
if(!c[j]&&map[i][j])
{
c[j]=-m;
check(j,-m);
}
else if(map[i][j]&&c[j]==m)
{
flag = true;return;
}
}
return;
}
bool istwograhic()
{
memset(c,0,sizeof(c));
c[1] = 1;
flag = false;
check(1,1);
return flag;
}
bool links(int k)
{
for(int i=1;i<=n;i++)
{
if(map[k][i]&&!vis[i])
{
vis[i] = 1;
if(!link[i]||links(link[i]))
{
link[i]= k;return true;
}
}
}
return false;
}
int main()
{
while(cin>>n>>m)
{
memset(map,0,sizeof(map));
memset(link,0,sizeof(link));
for(int i=1;i<=m;i++)
{
int a,b;
cin>>a>>b;
map[a][b]=1;map[b][a]=1;
}
if(istwograhic()){puts("No");continue;}
int num =0;
for(int i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
if(links(i))
{
num++;
}
}
// if(flag) puts("No");
printf("%d\n",num/2);
}
return 0;
}
hdu 2444
最新推荐文章于 2017-08-29 22:28:00 发布