#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int M=510;
int m,n;
int map[M][M], match[M], chk[M];
int dfs(int p)
{
int i;
for(i=1;i<=m;i++)
if( map[p][i] && chk[i]==0 )
{
chk[i]=1;
if( match[i]==0 || dfs( match[i] ) )
{
match[i]=p;
return 1;
}
}
return 0;
}
int solve()
{
int i,res;
memset(match,0,sizeof(match));
res=0;
for(i=1; i<=n; i++)
{
memset(chk,0,sizeof(chk));
res+=dfs(i);
}
return res;
}
int main()
{
// freopen("in","r",stdin);
// freopen("out","w",stdout);
int k,i,r,x,y,ans,imp,ca=1;
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
memset(map,0,sizeof(map));
for(i=0;i<k;i++)
{
scanf("%d%d",&x,&y);
map[x][y]=1;
}
ans=solve(); imp=0;
for(i=1;i<=n;i++)
for(r=1;r<=m;r++)
if(map[i][r])
{
map[i][r]=0;
if(solve()!=ans) imp++;
map[i][r]=1;
}
printf("Board %d have %d important blanks for %d chessmen.\n",ca++, imp, ans);
}
return 0;
}
hdu 1281
最新推荐文章于 2020-07-11 09:32:43 发布