POJ 3041-Asteroids-二分图匹配
2016-03-05 00:28
417 查看
题意:经典的二分图匹配问题。给出一个N*N矩阵,其中有K个障碍物。一发歼星炮可以清楚一行或者一列上的障碍物。求最少的开炮数。
做法:可以考虑最大点覆盖。建图左边顶点为行,右边顶点为列。若有障碍物则连边。此时最大点覆盖就是最小开炮数,也就是计算二分图最大匹配。使用匈牙利算法即可。
做法:可以考虑最大点覆盖。建图左边顶点为行,右边顶点为列。若有障碍物则连边。此时最大点覆盖就是最小开炮数,也就是计算二分图最大匹配。使用匈牙利算法即可。
/*--------------------------------------------------------------------------------------*/ // Helica's header // Second Edition // 2015.11.7 // #include <algorithm> #include <iostream> #include <cstring> #include <ctype.h> #include <cstdlib> #include <cstdio> #include <vector> #include <string> #include <queue> #include <stack> #include <cmath> #include <set> #include <map> //debug function for a N*M array #define debug_map(N,M,G) printf("\n");for(int i=0;i<(N);i++)\ {for(int j=0;j<(M);j++){\ printf("%d",G[i][j]);}printf("\n");} //debug function for int,float,double,etc. #define debug_var(X) cout<<#X"="<<X<<endl; /*--------------------------------------------------------------------------------------*/ using namespace std; const int maxn = 500+10; int uN,vN; int G[2*maxn][2*maxn],linker[maxn]; bool used[maxn]; bool dfs(int u) { for(int v=1;v<=vN;v++) { if(G[u][v]&& !used[v]) { used[v] = true; if(linker[v] == -1 || dfs(linker[v])) { linker[v] = u; return true; } } } return false; } int hungary() { int res = 0; memset(linker,-1,sizeof linker); for(int u=1;u<=uN;u++) { memset(used,false,sizeof(used)); if(dfs(u)) res++; } return res; } int N,K,M,T; int main() { while(~scanf("%d%d",&N,&K)) { memset(G,0,sizeof G); uN = vN = N; for(int i=0;i<K;i++) { int x,y; scanf("%d%d",&x,&y); G[x][y] = 1; } printf("%d\n",hungary()); } }
相关文章推荐
- TextView 的那些事儿
- Android View中getWidth方法
- framework层和native层实现联网控制(iptable方式)
- hadoop集群启动成功但live node为0
- DSP 2812: 使用C++实现的SCI从动站程序框架
- 使用Adobe Premiere Pro CC2015如何删除影片中的片段
- 反射实现 AOP 动态代理模式
- fastboot下载大镜像报错 remote: data too large
- ArcEngine尝试读取或写入受保护的内存
- URL安全的Base64编码,解码
- Codeforces Round #344 (Div. 2) C - Report 遇到排序什么的就是无尽的蛋疼
- 看了这个就弄明白各种数据类型了
- Linux命令总结
- HDU 1575 Tr A(矩阵快速幂)
- [MFC]对CString::GetBufferSetLength方法的探究
- ctex与texlive中的pdflatex与xelatex的区别
- POJ3013-Big Christmas Tree-最短路
- pymongo性能测试脚本
- 序列式容器List之初始化及其几种(不支持随机)访问形式
- 【代码笔记】Java基础:类的继承(构造器)