hdu1281(二分匹配+构图)

这是一篇关于使用二分匹配解决简单构图问题的博客,作者通过将横纵坐标视为点集建立二分图,并探讨如何判断关键格子对最大匹配数的影响。通过删除格子来检验其是否为关键格子,如果删除后仍能获得最大匹配数,那么该格子非关键。博客包含相关代码实现。
摘要由CSDN通过智能技术生成

      一个简单的二分构图题,因为以前做过更难的,所以这次很轻松的就AC了,不过关于求关键格子的那个思路还是在网上看的,水平还是很菜啊~~

     把横坐标和纵坐标分别看做两个点集,某个格子能放车的话就在对应的横纵坐标之间连一条边,这样,二分图就建好了。明显的,每一条边都代表一个车,要求能最多放的车数也就等价于求二分最大匹配了。而对于关键格子,由于关键格子是指,少了这个格子后就放不了最多的车数了,因此,将棋盘中的某个格子删去,若还能求出原来的最大匹配数,则说明该格子不是关键格子,反之就是了。

    代码如下:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
#include<stack>
#include<set>
#include<map>
using namespace std;
const int M=1010;
const int N=210;
bool g[N][N],vis[N];
int n,m,k,ans,match[N];
int u[N],v[N],first[N],next[N];
void build()
{
    memset(first,-1,sizeof(first));
    int i;
    for (i=0;i<k;i++) {
        scanf("%d%d",u+i,v+i);
        next[i]=first[u[i]];
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值