hdu1281(二分图匹配)

//把行和列变成点,能放的点就把行和列连起来  
//求二分图最大匹配就是最多能放的棋子数,这  
//还是比较基础的,但是在于怎么求相同的点的  
//个数,因为每一条边相当于一个点,我们可以  
//枚举删除每一条边,看二分图匹配的值是否会变 
#include
#include
#include
using namespace std;
int n,m;
int bmap[105][105];
int p[105][105];
int x[105*105],y[105*105];
int match[105];int vis[105];
bool dfs(int u)
{
    vis[u] = 1;
    for(int i=1;i<=m;i++)
    {
        if(bmap[u][i]&&!p[u][i])
        {
            if(match[i]==-1||!vis[match[i]]&&dfs(match[i]))
            {
                match[i] = u;
                return true;
            }
        }
    }
    return false;
}
int main()
{
    int k,a,b,t = 1;
    while(scanf("%d%d%d",&n,&m,&k)!=EOF)
    {
        memset(bmap,0,sizeof(bmap));
        memset(p,0,sizeof(p));
        for(int i=0;i


你可能感兴趣的:(图论)