hdu 1281

来源:互联网 发布:计算机机房网络管理 编辑:程序博客网 时间:2024/04/29 19:29
#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;}

0 0
原创粉丝点击