HDU1281 二分匹配 + 最需边
来源:互联网 发布:4年级网络简介阅读答案 编辑:程序博客网 时间:2024/05/02 00:01
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1281
题意:给出可放车的点坐标,问最多可以放多少个车(车可以互相攻击),为了达到放车数最多有多少个点是必须放车的。。。
思路:二分最大匹配 + 必须边。。。
#include<cstdio>#include<stdlib.h>#include<string.h>#include<string>#include<map>#include<cmath>#include<iostream>#include <queue>#include <stack>#include<algorithm>#include<set>using namespace std;#define INF 1e8#define eps 1e-8#define LL long long#define maxn 100010#define mol 1000000007int n,m,k;int a[110],b[110],ma[110][110],vis[110],ans[110];int dfs(int id){ for(int i=1;i<=m;i++){ if(vis[i]==0&&ma[id][i]){ vis[i]=1;if(ans[i]==0||dfs(ans[i])){ ans[i]=id; return 1;}}}return 0;}int match(){ int sum=0; for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) sum++; } return sum;}int main(){int Case=1;while(~scanf("%d%d%d",&n,&m,&k)){ memset(ma,0,sizeof(ma)); memset(ans,0,sizeof(ans)); int x,y,i,j,num=0; for(i=1;i<=k;i++) { scanf("%d%d",&a[i],&b[i]); ma[a[i]][b[i]]=1; } int sum=match(); int temp; for(i=1;i<=k;i++) { memset(ans,0,sizeof(ans)); ma[a[i]][b[i]]=0; int d=match(); ma[a[i]][b[i]]=1; if(d!=sum) num++; } printf("Board %d have %d important blanks for %d chessmen.\n",Case++,num,sum);}return 0;}
0 0
- HDU1281 二分匹配 + 最需边
- hdu1281 二分匹配
- hdu1281(二分匹配+构图)
- hdu1281二分图匹配
- hdu1281-二分图匹配
- HDU1281 二分匹配
- hdu1281(二分图匹配)
- HDU1281 棋盘游戏 二分匹配
- hdu1281二分匹配关键边
- hdu1281二分匹配关键边
- HDU1281(最大二分匹配+枚举)
- 二分匹配 HDU1281 棋盘游戏
- hdu1281(二分图匹配)
- hdu1281+坐标构图+二分匹配
- hdu1281 二分图匹配_必要边
- 二分图最大匹配 (hdu1281、1528)
- HDU1281棋盘游戏 二分图最大匹配
- HDU1281(二分图最大匹配)
- xcode之Application Loader
- 增强型单片机STC12C5A60S2输出各种频率方波信号
- Maven初步学习
- 心态的差距 说说高端组和低端组的差别
- Android 视频监控的解决方案探讨
- HDU1281 二分匹配 + 最需边
- Confluence 内容报表宏
- Loadrunner中web_find和web_reg_find函数的使用与区别
- 小猴子下落
- 人脸识别中的八大难题(zz)
- python解析ini文件
- fsl_e500 pci设备驱动vxworks的实现
- CListCtrl使用技巧
- qilu.com 198万结拍,shunfeng.com 106万结拍,126.cn 68万结拍