hdu1281 棋盘游戏 二分图匹配

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

Description

小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放,小希还是很轻松的解决了这个问题(见下图)注意不能放车的地方不影响车的互相攻击。 
所以现在Gardon想让小希来解决一个更难的问题,在保证尽量多的“车”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放车,也可以保证尽量多的“车”被放下。但是某些格子若不放子,就无法保证放尽量多的“车”,这样的格子被称做重要点。Gardon想让小希算出有多少个这样的重要点,你能解决这个问题么? 

Input

输入包含多组数据, 
第一行有三个数N、M、K(1<N,M<=100 1<K<=N*M),表示了棋盘的高、宽,以及可以放“车”的格子数目。接下来的K行描述了所有格子的信息:每行两个数X和Y,表示了这个格子在棋盘中的位置。 

Output

对输入的每组数据,按照如下格式输出: 
Board T have C important blanks for L chessmen. 

妙啊,不得不说一句妙啊

首先就是放置车的最大数目,简单的二分图匹配,比前几道题简单多了。然而这个什么重要点着实难搞。怎么办呢,想了半天未果(其实是不敢搞时间复杂度太高)

最后查了题解,发现是每次删一条边,做一次匈牙利算法看是否和之前的结果相同,不相同就记一个重要点。(麻蛋啊本来o(n^2)直接多乘了o(n)的复杂度,这都tm不超时的)

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
const int inf=0x3f3f3f3f;
int n,m;
int a[10005],b[10005];
int mp[105][105];
int girl[1005];
bool vis[1005];
int dfs(int x)
{
    for(int i=1; i<=m; i++)
    {
        if(!vis[i]&&mp[x][i])
        {
            vis[i]=1;
            if(girl[i]==-1||dfs(girl[i]))
            {
                girl[i]=x;
                return 1;
            }
        }
    }
    return 0;
}
int main()
{
    int x,y,T,p,tt=0;
    while(scanf("%d %d %d",&n,&m,&p)!=EOF)
    {
        memset(mp,0,sizeof(mp));
        memset(girl,-1,sizeof(girl));
        for(int i=1; i<=p; i++)
        {
            scanf("%d %d",&a[i],&b[i]);
            mp[a[i]][b[i]]=1;
        }
        int ans=0;
        for(int i=1; i<=n; i++)
        {
            memset(vis,0,sizeof(vis));
            ans+=dfs(i);
        }
        //printf("%d\n",ans);
        int cnt=0;
        for(int i=1; i<=p; i++)
        {
            mp[a[i]][b[i]]=0;
            memset(girl,-1,sizeof(girl));
            int bns=0;
            for(int i=1; i<=n; i++)
            {
                memset(vis,0,sizeof(vis));
                bns+=dfs(i);
            }
            mp[a[i]][b[i]]=1;
            if(bns<ans) cnt++;
        }
        printf("Board %d have %d important blanks for %d chessmen.\n",++tt,cnt,ans);
    }
    return 0;
}




SEED-VII 实战指南:如何利用多模态脑电图数据提升情感识别精度 本文提供了SEED-VII多模态脑电图数据集的实战指南,详细介绍了如何利用该数据集提升情感识别精度。内容涵盖数据获取、预处理、特征提取,以及构建多模态融合神经网络模型的关键步骤,并强调了被试者独立评估的重要性,为情感计算研究者提供了从数据到模型的全流程解决方案。 阅读详情

相关推荐

【心得】Back trader避坑指南(一)——关于安装过程的问题

我认为一开始比较容易卡住的地方,主要是安装上面的问题。我给大家整理的这个版本是我能跑通的版本,还有一些好用的神器,手把手教你怎么装!

weixin_38347757的博客 1284

HDU 1281 棋盘游戏 二分图最大匹配

一、内容 小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放,小希还是很轻松的解决了这个问题(见下图)注意不能放的地方不影响的互相攻击。 所以现在Gardon想让小希来解决一个更难的问题,在保证尽量多的“”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格...

Tizzi的博客 963

Python 爬虫实战:攻克小红书种草笔记,抓取美妆好物推荐数据

通过本次 Python 爬虫实战,我们成功地从小红书爬取了美妆种草笔记的数据,并进行了存储、处理、分析和可视化展示。在这个过程中,我们不仅掌握了爬虫技术的基本应用,还学会了如何对动态加载的数据进行处理和分析。然而,本次爬虫任务也存在一些局限性,例如仅爬取了部分笔记的数据,且未对笔记中的图片和视频内容进行分析。在未来的工作中,我们可以进一步优化爬虫程序,爬取更多笔记的数据,并深入分析笔记中的多媒体内容、用户行为模式等,为美妆品牌和消费者提供更有价值的数据支持。

u014481728的博客 3226

hdu 1281 棋盘游戏 (二分图匹配)

题目链接:   hdu 1281 题目大意:   给出NxM的棋盘,其中有K个点不能放“”                   定义:若某个点不能放"",则棋盘中放""的最大数目减少该点就为重要点                   求重要点的个数和棋盘中放""的最大数目 解题思路:   求出放""的最大数目,行作为X集合,列作为Y集合                

ンZee的解题报告 1815

HDU 1281 棋盘游戏二分图最大匹配

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1281 题意概括: 有N*M大的棋盘,要在里面放尽量多的“”,求最多能放的的个数,和为了放最多的有多少个各自必须放。 解题思路:由“”的规则可知,同一行或者同一列只能放一个,可以放的点作为边,对行和列最大匹配。然后遍历去点,如果去掉该点后最大匹配数减少,则说明那个点是不能去...

Mod_13的博客 119

HDU1281 棋盘游戏 —— 二分图最大匹配 + 枚举

题目链接:https://vjudge.net/problem/HDU-1281 棋盘游戏 Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5465Accepted Submission(s): 3224 Pr...

alince20008的博客 202

HDU OJ 1281 棋盘游戏二分图匹配之最大匹配重要点】

原题连接:点击打开链接 题意:………… 思路:求最多能放多少个 “”,可以转化成 二分图的最大匹配!,把能放的点的 横纵坐标 当作 二分图的一条边!最大匹配就满足了题目中任意两个“”不会互相吃到的条件,因为匹配结果,会使得棋盘中的匹配点(也就是二分图中的匹配边),不在同一列且不再同一行。求出最大匹配后 ,则重要点必定在最大匹配的边上!依次去掉每条便,再求最大匹配看和原匹配是否相等即可!

nyist_飘谊 2888

HDU - 1281 棋盘游戏 (二分图匹配)

HDU - 1281 题意:中文题题意还比较好理解。 思路:肯定又是行列分开,行是一个二分图的x部,列是y部,这里不影响攻击,可以推出每行每列最多一个兵(可能有些位置不能放,所以可能有的行是没有的),如果把这条边(也就对应一个位置)删掉,答案减少,那么这条边(这个位置)一定是重要点。枚举 + 匈牙利 开始写的时候,我把所有的匹配边删掉了,再第二次匈牙利计算答案,后来发现连样例都过不了,才发现

shinimashzi 346

HDU 1281 棋盘游戏二分图匹配

题意:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“”,并且使得他们不能互相攻击,Gardon限制了只有某些格子才可以放,注意不能放的地方不影响的互相攻击。 在保证尽量多的“”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放,也可以保证尽量多的“”被放下。但是某些格子若不放子,就无法保证放尽量多的“”,这样的格子被称做重要点。算出有多少个这样的重要点? 题解:二分图匹配 注意题目说不能放的地方不影响的互相攻击,也就是对于给出的能放的点(i,j)(i, j)(i,

gongyuandaye的博客 267

棋盘游戏 HDU - 1281二分图最大匹配

小希和Gardon在玩一个游戏:对一个NM的棋盘,在格子里放尽量多的一些国际象棋里面的“”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放,小希还是很轻松的解决了这个问题(见下图)注意不能放的地方不影响的互相攻击。 所以现在Gardon想让小希来解决一个更难的问题,在保证尽量多的“”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放,也可以保证尽量多的“”被放下。但是某些格子若不放子,就无法保证放尽量多的“”,这样的格子被称做重要点。Gardo

数据结构实验之栈与队列十一:refresh的停车场 750

HDU 1281 棋盘游戏二分图匹配

题目链接:点击打开链接 思路:经典二分图建图模型, 对于每一个格子, 按照行标建一列, 列标建一列, 然后进行匹配即可, 然后尝试删除每条边, 再进行匹配看看有没有比原匹配小。  复杂度显然会超时。。 数据水了吧。 细节参见代码: #include #include #include #include #include #include #include #include #include

AC_Arthur的专栏 3288

hdu1281 棋盘游戏 二分图最大匹配 枚举

HDU 1281 点击打开链接 大致题意: 有一个n*m的棋盘,现在我们要在一些给定的格子里放“”。 我们要求两个值:(1)在给定的格子里最多能放“”的数目。                              (2)在给定的格子里,假如去掉某个格子,但影响了放“”的最大数目。我们记它为重要点,我们需要求有几个重要点。 大致思路: 对于(1),我们将给出的格子的x值和y值分

zyy.cpp 的博客 342

HDU 1281 棋盘游戏 二分图的最大匹配

棋盘游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2535    Accepted Submission(s): 1476 Problem Description 小希和Gardon在玩一个游戏:对一个N*M的棋盘

小人物的草稿本 1292

二分图匹配hdu 1281 棋盘游戏

http://acm.hdu.edu.cn/showproblem.php?pid=1281 分析:匹配棋盘的行和列(两个“”不能放在同一行或同一列),算出最大匹配值,然后依次去掉每一个点判断是否可放棋子的数量减少,得出关键点 #include #include using namespace std; const int NM=105; int link[NM],flag

yduqytd的专栏 612

二分图匹配棋盘游戏 HDU - 1281

Think: 1知识点:二分图匹配 2题意:在棋盘内选定一些位置,在这些位置中选取部分位置放置”,要求每一行或者每一列不能出现多余1个“”,询问最多放置几个“”和那些位置是需要重要的(即若不存在,则最多放置数量会减少) 3思路: (1):X集合:{xi} (2):Y集合:{yi} (3):思路借鉴博客链接 4思考: (1):建立有向图 (2):match[yi] = x

BlessingXRY的博客 434

HDU 1281 棋盘游戏 二分图匹配

小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放,小希还是很轻松的解决了这个问题(见下图)注意不能放的地方不影响的互相攻击。 所以现在Gardon想让小希来解决一个更难的问题,在保证尽量多的“”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放,也可

wuyin_Jane的博客 626

hdu 1281 棋盘游戏 二分图匹配

#include #include #include using namespace std; #define N 110 bool edge[N][N]; int linker[N]; bool vis[N]; int n,m; struct node{ int r,c; }s[100*N]; bool dfs(int u){ for(int i=1;i<=m;i++){ if(edg

DieOrThink 847

棋盘游戏 HDU - 1281二分图匹配

小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放,小希还是很轻松的解决了这个问题(见下图)注意不能放的地方不影响的互相攻击。 所以现在Gardon想让小希来解决一个更难的问题,在保证尽量多的“”的前提下,棋盘里有些格子是可以避开的,也就是说,不在这些格子上放,...

weixin_43740907的博客 204

【代码超详解】HDU 1281 棋盘游戏二分图匹配

一、题目描述 http://acm.hdu.edu.cn/showproblem.php?pid=1281 二、算法分析说明与代码编写指导 已知:处于同一行或同一列的可以相互攻击。若要使放在棋盘上的不能相互攻击,应该让每一行、每一列都只有一个。 本题的难点在于建立图论模型。 设二分图 G(V1, V2, E)。每一行、每一列的点分别映射到 V1、V2,如果位置 (x, y) 允许放,则将对...

COFACTOR 323

hdu 1281 棋盘游戏二分图匹配

hdu 1281 棋盘游戏Description 小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放,小希还是很轻松的解决了这个问题(见下图)注意不能放的地方不影响的互相攻击。 所以现在Gardon想让小希来解决一个更难的问题,在保证尽量多的“”的前提下,棋盘里有

总有那么一群人喜欢盯着我的博客看,估计这是他们见过最长的博客名,我必须得告诉他们博客名最长可以写多长 682
上一篇: hdu2255 奔小康赚大钱,二分图最优匹配km模板
下一篇: 算法讲解:二分图匹配
thunderMrbird
博客等级 码龄10年 41粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值