HDU 1281 棋盘游戏 (二分图+枚举每点是否为匹配关键)
来源:互联网 发布:凌虚剑淘宝 编辑:程序博客网 时间:2024/06/05 04:25
思路:容易看出是二分图的最大匹配问题,但是如何判断某点是否为关键点是关键。我们可以将每个可能的点枚举一下
然后进行删点,判断删点后的最大匹配是否仍等于原来的最大匹配即可。
#include<cstdio>#include<iostream>#include<cstring>#include<queue>#include<algorithm>using namespace std;int head[1000],cropath[1000],s,a[1000],b[1000],n;bool use[1000],Map[1000][1000];int pre[1000];int DFS(int v){ int i,j,k; for(i=1; i<=n; i++) if(!use[i]&&Map[v][i]) { use[i]=true; if(cropath[i]==-1||DFS(cropath[i])) { cropath[i]=v; return 1; } } return 0;}int main(){ int m,i,j,k,cla=1; while(~scanf("%d%d%d",&m,&n,&k)) { memset(cropath,-1,sizeof(cropath)); memset(Map,false,sizeof(Map)); for(i=0; i<k; i++) { scanf("%d%d",&a[i],&b[i]); Map[a[i]][b[i]]=true; } printf("Board %d have ",cla++); int ans=0; for(i=1; i<=m; i++) { memset(use,false,sizeof(use)); if(DFS(i)) ans++; } int z=0,tmp; for(i=0; i<k; i++) { tmp=0; if(Map[a[i]][b[i]]) { memset(cropath,-1,sizeof(cropath)); Map[a[i] ][b[i] ]=false; for(int p=1;p<=m; p++) { memset(use,false,sizeof(use)); tmp+=DFS(p); } Map[a[i] ][b[i]]=true; if(ans!=tmp) z++; } } printf("%d important blanks for %d chessmen.\n",z,ans); } return 0;}
0 0
- HDU 1281 棋盘游戏 (二分图+枚举每点是否为匹配关键)
- HDU 1281棋盘游戏(二分匹配,关键点)
- HDU 1281 棋盘游戏(二分图最大匹配:关键边)
- HDU 1281 棋盘游戏(二分图最大匹配:关键边)
- HDU 1281 棋盘游戏 二分图最大匹配 + 枚举
- hdu 1281 棋盘游戏(枚举,二分图最大匹配)
- HDU-1281-棋盘游戏 [二分匹配][关键匹配]
- hdu 1281 棋盘游戏(二分图匹配--最小点覆盖)
- hdu 棋盘游戏 (求二分图最大匹配的关键点)
- hdu 1281 棋盘游戏 ( 行列匹配+求关键点 )
- hdu 1281 棋盘游戏【二分匹配+暴力枚举】
- hdu 1281 棋盘游戏 二分图匹配
- hdu 1281 棋盘游戏 (二分图匹配)
- 【二分图匹配】hdu 1281 棋盘游戏
- 棋盘游戏 - HDU 1281 二分图匹配
- hdu 1281 棋盘游戏(二分图匹配)
- HDU 1281 棋盘游戏 二分图匹配
- hdu 1281 棋盘游戏 二分图匹配;
- Android Service 全面总结
- Hashset实现原理
- POJ 1065 Wooden Sticks 贪心
- Android程序完全退出的三种方法
- Java GC基本算法
- HDU 1281 棋盘游戏 (二分图+枚举每点是否为匹配关键)
- 日报2015/10/14(极客学院安卓视频学习)
- 操作RPM和DEB包的PYTHON模块
- 阿里云云服务器硬盘分区及挂载
- 通配符的匹配很全面, 但无法找到元素 'context:component-scan' 的声明。
- LINUX下通过C++访问SQLSERVER数据库
- Saving James Bond - Easy Version
- iOS8下的远程推送
- 人脸识别---排序测度特征(Ordinal Measures)