题目:点击打开链接

题目就是给了一个图,里面有的地方被标记,不能用了,问最多可以取多少1*2的矩形!

思路:最近在看网络流,二分图,一眼就看出是个最大匹配!建边找最大匹配就好!建边一定注意,让点与点不要重合!也就是点的ID值唯一!

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<string>
using namespace std;
typedef long long ll;
const int INF=0X3f3f3f3f;int mapp[105][105];
int n,m;
int girl[100010],use[100010];
int dic[][2]={{1,0},{0,1},{-1,0},{0,-1}};
vector<int > vec[100010];bool dfs(int u)
{for(int i=0;i<vec[u].size();i++){int v=vec[u][i];if(!use[v]){use[v]=1;if(girl[v]==-1||dfs(girl[v])){girl[v]=u;return true;}}}return false;
}int solve()
{int sum=0;memset(girl,-1,sizeof(girl));for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){memset(use,0,sizeof(use));if(dfs(i*101+j))sum++;}}return sum;
}bool check(int x,int y)
{if(x>0&&x<=n&&y>0&&y<=m&&!mapp[x][y])return true;return false;
}int main()
{while(scanf("%d%d",&n,&m)!=EOF&&n+m){memset(mapp,0,sizeof(mapp));int t;scanf("%d",&t);for(int i=0;i<t;i++){int x,y;scanf("%d%d",&x,&y);mapp[x][y]=1;}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)vec[i*101+j].clear();for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){if(!mapp[i][j]){if(check(i,j+1)){int aa=i*101+j;int bb=i*101+j+1;vec[aa].push_back(bb);vec[bb].push_back(aa);}if(check(i+1,j)){int aa=i*101+j;int bb=(i+1)*101+j;vec[aa].push_back(bb);vec[bb].push_back(aa);}if(check(i-1,j)){int aa=i*101+j;int bb=(i-1)*101+j;vec[aa].push_back(bb);vec[bb].push_back(aa);}if(check(i,j-1)){int aa=i*101+j;int bb=(i)*101+j-1;vec[aa].push_back(bb);vec[bb].push_back(aa);}}}printf("%d\n",(solve()/2));}return 0;
}

ZOJ1516HDU1507(二分图匹配)相关推荐

  1. Dinic二分图匹配 || Luogu P3386

    题面:[模板]二分图匹配 思路:Dinic实现二分图匹配,要建一个超级源点(S)和超级汇点(T),分别定为N+M+1和N+M+2 然后S去和N中的数建正边和反边,正边权值为1,反边权值为0:M中的数去 ...

  2. 二分图匹配匈牙利算法DFS实现

    1 /*==================================================*\ 2 | 二分图匹配(匈牙利算法DFS 实现) 3 | INIT: g[][]邻接矩阵; ...

  3. poj1274(二分图匹配)

    (一道基础的二分图匹配) 题目意思大概为N个牛和M个栅栏,一个牛和一个栅栏只能匹配一次,求最大匹配 直接套用二分图最大匹配模板即可 #include <iostream> #include ...

  4. poj2724(二分图匹配)

    题目大概意思为有部分奶酪需要处理,若两个奶酪的二进制只有一位不同,则可以一起处理,问最少需要处理几次 题目思路: 将可以一起处理的两个奶酪用边连接在一起,相当于边只连接二进制中有偶数个1的奶酪和二进制 ...

  5. 算法模板——二分图匹配

    实现功能为二分图匹配 原理:匈牙利算法,核心思想--匹配上了就配,没直接匹配上也要通过前面的腾出位置让这个匹配上(详见:趣写算法系列之--匈牙利算法) 本程序以Codevs2776为例 详见Codev ...

  6. 算法:ACM二分图匹配 HDU2063

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2063 摘录于互联网,原创作者redraiment,很详细的二分图匹配入门资料! 2063 过山车 Pr ...

  7. BZOJ1433 [ZJOI2009]假期的宿舍 - 二分图匹配

    题解 一道裸的二分图匹配,稍微有一点细节需要注意, 但是非常裸= = 本校并且住校的向自己的床和 自己认识的并且本校的人的床连边 离校的不需要向外连边 不是本校的就和自己认识的 并且是本校的人的床连边 ...

  8. POJ2536 二分图匹配

    题意:      有n只老鼠,m个洞,每个洞最多可以藏一只老鼠,每个老鼠的移动速度都是v,给你他们的当前坐标,和洞的坐标,突然老鹰来了,他们必须在s秒内跑到一个洞藏起来,问你最少有多少只老鼠被抓走了. ...

  9. URAL 1721 Two Sides of the Same Coin(二分图匹配,输出匹配对象)

    题意:给出n个人的信息,名字.特征.排名. 在排名相差2的前提下,特征为testdata可以与特征为statements的组队,特征为anything可以任何一人组队: 求最多匹配对数,并将每队名字输 ...

  10. zoj3988 二分图匹配

    给一个数组,对于每两个数加起来为素数那么就是一个集合,求不超过k个集合的最多数是多少 解法:二分图匹配,先打素数筛,预处理边集,匹配完之后分两种情况k>匹配数,那么可以直接输出匹配数*2,否则可 ...

最新文章

  1. 利用最小二乘法求解仿射变换参数
  2. 2022年重大颠覆性科技创新趋势报告(完整版)
  3. [安卓] 12、开源一个基于SurfaceView的飞行射击类小游戏
  4. Android中ActivityManagerService与应用程序(客户端)通信模型分析
  5. 社工库365开网站公开售卖盗取的账号信息
  6. ABAP:利用SAP定时器自动刷新LIST
  7. 《2020年AI新基建发展白皮书》重磅发布,展示百度智能云多个落地案例
  8. 驳《从团购网站看中国人的创新精神》
  9. Vs 2015 批量 删除注释
  10. 你真的懂 timeout 吗?
  11. 枚举所有进程及其ID
  12. WebCombo 客户端绑定数据
  13. SSM框架搭建+easyui增删改查
  14. 用MySQL写怎么删除字母_mysql如何替换掉字母
  15. 【Spring笔记】Spring创建hello程序
  16. 淘宝客工具箱源码,一键转链,淘口令解析 淘宝客中间页生成
  17. 一个简单的划词翻译工具
  18. python唯美壁纸_Python爬虫教程爬取5K分辨率超清唯美壁纸源码
  19. 怎么用计算机弹出soldout,《SOLDOUT2》游戏怎么玩 游戏攻略玩法全面介绍
  20. 新浪微博开发者创新基金开始接受申请

热门文章

  1. java代码绘制简单的图形
  2. 网站统计中访客标识码有什么作用
  3. Tenth season fifth episode,Rachel‘s sister came again???????
  4. VSCode取消注释斜体
  5. 【python】图片处理_分割图片
  6. 大淘客的index.php,index.php · zenozhengs/大淘客CMS底部菜单修改版 - Gitee.com
  7. 数据来源渠道及采集工具_几款简单好用的爬虫抓取数据采集工具
  8. DEBUG指示灯详细说明
  9. Pr入门系列之十三:抠像与合成
  10. 第二章 装配bean