【HDOJ 2444】The Accomodation of Students
判断是否为二分图+二分图最大匹配 由于数据小 暴力水过去了。。。另一题3478专门卡这个 一会去做,。 由于是双向二分图 结果要除2
代码如下:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
bool mp[233][233],vis[233];
int n,link[233];
bool can(int p)
{
int i;
for(i = 1; i <= n; ++i)
{
if(!vis[i] && mp[p][i])
{
vis[i] = 1;
if(link[i] == -1 || can(link[i]))
{
link[i] = p;
return true;
}
}
}
return false;
}
int main()
{
int m,a,b,i,f,cnt;
while(~scanf("%d %d",&n,&m))
{
f = 1;
memset(mp,0,sizeof(mp));
while(m--)
{
scanf("%d %d",&a,&b);
if(f)
for(i = 1; i <= n; ++i)
if(mp[b][i] && mp[a][i]) {f = 0;break;}
mp[b][a] = mp[a][b] = true;
}
if(f)
{
memset(link,-1,sizeof(link));
cnt = 0;
for(i = 1; i <= n; ++i)
{
memset(vis,0,sizeof(vis));
if(can(i)) cnt++;
}
printf("%d\n",cnt/2);
}else puts("No");
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-03 01:38:12