#include<stdio.h> #include<string.h> #include<queue> using namespace std; #define maxn 210 int map[maxn][maxn],color[maxn]; int vis[maxn],match[maxn],n; int bfs(int u,int n) { int i; queue<int>q; q.push(u); color[u]=1; while(!q.empty()) { int v=q.front(); q.pop(); for(i=1;i<=n;i++) { if(color[i]==-1&&map[v][i]) { q.push(i); color[i]=!color[v]; } if(color[i]==color[v]&&map[v][i]) return 0; } } return 1; } int dfs(int u) { int i,j; for(i=1;i<=n;i++) { if(map[u][i]&&!vis[i]) { vis[i]=1; if(match[i]==-1||dfs(match[i])) { match[i]=u; return 1; } } } return 0; } int main() { int i,j,m; while(scanf("%d%d",&n,&m)!=EOF) { memset(color,-1,sizeof(color)); memset(map,0,sizeof(map)); memset(match,-1,sizeof(match)); for(i=0;i<m;i++) { int x,y; scanf("%d%d",&x,&y); map[x][y]=map[y][x]=1; } int flag=1; for(i=1;i<=n;i++) { if(color[i]==-1&&!bfs(i,n)) { flag=0; break; } } if(!flag) { printf("No\n"); continue; } int ans=0; for(i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) ans++; } printf("%d\n",ans/2); } }
时间: 2024-11-06 11:14:13