#include<bits/stdc++.h>
using namespace std;
#define MAXN 205
int n,m,color[MAXN],vis[MAXN],link[MAXN];
int mp[MAXN][MAXN];
int bfs(){
memset(color,-1,sizeof(color));
for(int j=1;j<=n;j++){
if(color[j]!=-1)continue;
color[j]=1;
queue<int> q;
q.push(j);
while(!q.empty())
{
int k=q.front();
q.pop();
for(int i=1;i<=n;i++)
{
if(mp[k][i]&&color[i]==color[k])
{
return 0;
}
if(mp[k][i]&&color[i]==-1)
{
q.push(i);
color[i]=1-color[k];
}
}
}
}
return 1;
}
int match(int x)
{
int i,k;
for(i=1;i<=n;i++)
{
if(mp[x][i]==1&&!vis[i])
{
vis[i]=1;
if(link[i]==-1||match(link[i]))
{
link[i]=x;
return 1;
}
}
}
return 0;
}
int hungary(){
int count=0;
memset(link,-1,sizeof(link));
for(int i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
if(match(i))
{
count++;
}
}
return count;
}
int main(){
while(~scanf("%d%d",&n,&m)){
memset(mp,0,sizeof(mp));
for(int i=0;i<m;i++){
int a,b;
scanf("%d%d",&a,&b);
mp[a][b]=mp[b][a]=1;
}
if(bfs()==0){
printf("No\n");
continue;
}
else{
printf("%d\n",hungary()/2);
}
}
}
hdu 2444 The Accomodation of Students(染色判断二分图+匈牙利算法)
最新推荐文章于 2022-07-30 09:06:04 发布