【二分图匹配】hdu 1281 棋盘游戏
来源:互联网 发布:杨百万软件多少钱 编辑:程序博客网 时间:2024/04/30 19:34
http://acm.hdu.edu.cn/showproblem.php?pid=1281
分析:匹配棋盘的行和列(两个“车”不能放在同一行或同一列),算出最大匹配值,然后依次去掉每一个点判断是否可放棋子的数量减少,得出关键点
#include <iostream>#include <cstdio>using namespace std;const int NM=105;int link[NM],flag[NM],a[NM][NM],m;struct Chess{int x,y;}che[NM*NM];int Find(int x){for(int i=1;i<=m;i++) //m{if(a[x][i]&&!flag[i]){flag[i]=1;if(link[i]==-1||Find(link[i])){link[i]=x;return true;}}}return false;}int main(){int i,j,k,n,T,x,y,sum,ans,ANS;T=0;while(scanf("%d%d%d",&n,&m,&k)!=EOF){memset(a,0,sizeof(a));T++;for(i=0;i<k;i++){scanf("%d%d",&x,&y);che[i].x=x;che[i].y=y;a[x][y]=1;}memset(link,-1,sizeof(link));ans=0;for(i=1;i<=n;i++){memset(flag,0,sizeof(flag));if(Find(i)) ans++;}ANS=0;for(i=0;i<k;i++){a[che[i].x][che[i].y]=0;sum=0;memset(link,-1,sizeof(link));for(j=1;j<=n;j++) //n{memset(flag,0,sizeof(flag));if(Find(j)) sum++;}if(sum<ans) ANS++;a[che[i].x][che[i].y]=1;}printf("Board %d have %d important blanks for %d chessmen.\n",T,ANS,ans);}return 0;}
0 0
- hdu 1281 棋盘游戏 二分图匹配
- hdu 1281 棋盘游戏 (二分图匹配)
- 【二分图匹配】hdu 1281 棋盘游戏
- 棋盘游戏 - HDU 1281 二分图匹配
- hdu 1281 棋盘游戏(二分图匹配)
- HDU 1281 棋盘游戏 二分图匹配
- hdu 1281 棋盘游戏 二分图匹配;
- hdu 1281 棋盘游戏(二分匹配)
- hdu 1281 棋盘游戏 (二分匹配)
- hdu 1281 棋盘游戏 二分匹配
- hdu 1281 棋盘游戏【二分匹配】
- hdu 1281 棋盘游戏(二分匹配)
- hdu 1281 棋盘游戏 二分匹配
- HDU 1281 棋盘游戏(二分匹配)
- HDU 1281 棋盘游戏-二分匹配
- hdu 1281 棋盘游戏 (二分匹配)
- HDU 1281 棋盘游戏【二分匹配】
- HDU 1281 棋盘游戏 二分匹配
- Friso-1.6.0 发布 - C语言高性能中文分词器,GBK支持
- 岁末年初,2013随笔
- 重装win8出现“输入的产品密钥与用于安装的任何可用windows映像都不匹配”问题解决方案
- linux下getevent
- c# 读取本地数据库数据,写到远程数据库中
- 【二分图匹配】hdu 1281 棋盘游戏
- 损失函数-经验风险最小化-结构风险最小化
- ECC加密算法入门介绍
- Vector与ArrayList的区别
- 黑马程序员 知识点总结-Java集合框架(List)
- PDB文件:每个开发人员都必须知道的
- merge
- 模板变量的高级使用
- Java CSV读--Read And Parse CSV File In Java