标签:
4 4 1 2 1 3 1 4 2 3 6 5 1 2 1 3 1 4 2 5 3 6
No 3
#include<stdio.h>
#include<string.h>
#include<string>
#include<vector>
#include<iostream>
using namespace std;
int color[205],vis[205],link[205];
int n,m;
vector<int>vt[205];
int dfs(int u,int c)
{
if(color[u]==0)
{
color[u]=c;
}
else
{
if(color[u]==c)
return 0;
return 1;
}
for(int i=0;i<vt[u].size();i++)
{
int v=vt[u][i];
if(dfs(v,-c))
return 1;
}
return 0;
}
int jud()
{
int i;
memset(color,0,sizeof(color));
for(i=1;i<=n;i++)
{
if(!color[i])
if(dfs(i,1))
return 0;
}
return 1;
}
int dfs(int u)
{
for(int i=0;i<vt[u].size();i++)
{
int v=vt[u][i];
if(!vis[v])
{
vis[v]=1;
if(link[v]==-1||dfs(link[v]))
{
link[v]=u;
return 1;
}
}
}
return 0;
}
int main()
{
//int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
int i;
for(i=0;i<=n;i++)
vt[i].clear();
for(i=0;i<m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
vt[u].push_back(v);
vt[v].push_back(u);
}
if(!jud())
{
printf("No\n");
continue;
}
int ans=0;
memset(link,-1,sizeof(link));
for(i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
if(dfs(i))
ans++;
}
printf("%d\n",ans/2);
}
}HDOJ 题目2444 The Accomodation of Students(染色法判二分图,最大匹配)
标签:
原文地址:http://blog.csdn.net/yu_ch_sh/article/details/44221117