【二分匹配】 HDU 5093 Battle ships 经典二分题
来源:互联网 发布:数据分析的具体流程 编辑:程序博客网 时间:2024/05/16 05:24
*表示可以放
o表示不可以放
#表示障碍物
经典二分:
对于横着能相互到达的编号相同,
对于竖着能相互到达的编号相同,
建边表示该位置可以放的啊
#include <cstdio>#include <cstring>#include <cstdlib>#include <string>#include <iostream>#include <algorithm>#include <sstream>#include <cmath>using namespace std;#include <queue>#include <stack>#include <vector>#include <deque>#define cler(arr, val) memset(arr, val, sizeof(arr))typedef long long LL;const int MAXN = 100200;const int MAXM = 6000010;const int INF = 0x3f3f3f3f;const int mod = 1000000007;char mp[90][90];int num1[69][69],num2[68][69],g[2566][2566];int gn,gm;int link[2566];bool used[2566];bool dfs(int u){ for(int v=1; v<gm; v++) if(g[u][v]&&!used[v]) { used[v]=true; if(link[v]==-1||dfs(link[v])) { link[v]=u; return true; } } return false;}int getmax(){ int sum=0; cler(link,-1); for(int i=1; i<gn; i++) { cler(used,false); if(dfs(i)) sum++; } return sum;}int main(){#ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout);#endif int t,n,m; cin>>t; while(t--) { cler(mp,0); cler(num1,0); cler(num2,0); cler(g,0); cin>>n>>m; for(int i=0; i<n; i++) scanf("%s",mp[i]); gn=gm=1; for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { if(mp[i][j]=='*') num1[i][j]=gn; else if(mp[i][j]=='#') gn++; } gn++; } for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { if(mp[j][i]=='*') num2[j][i]=gm; else if(mp[j][i]=='#') gm++; } gm++; } for(int i=0; i<n; i++) for(int j=0; j<m; j++) g[num1[i][j]][num2[i][j]]=1; cout<<getmax()<<endl; } return 0;}
对于横着能相互到达的编号相同,
对于横着能相互到达的编号相同,
0 0
- 【二分匹配】 HDU 5093 Battle ships 经典二分题
- hdu 5093 Battle ships 经典二分匹配模型
- hdu 5093 Battle ships 二分图匹配
- hdu 5093 Battle ships(二分图匹配)
- HDU 5093 Battle ships [二分图匹配]
- hdu 5093 Battle ships 二分匹配
- hdu 5093 Battle ships(二分匹配)
- hdu 5093 Battle ships 最大二分匹配
- HDU 5093 -- Battle ships【二分图最大匹配 && 经典建图】
- HDU 5093 Battle ships(二分图最大匹配)
- HDU 5093 Battle ships(最大流 or 二分匹配)
- hdu 5093 Battle ships(最大二分匹配)
- HDU 5093 Battle ships(二分图匹配)
- HDU - 5093 Battle ships 初学 二分图匹配
- hdu 5093 Battle ships(二分图匹配)
- HDU 5093 Battle ships(二分图匹配)
- HDU 5093 Battle ships [二分图匹配] [匈牙利算法]
- HDU 5093 Battle ships(二分图匹配)
- 《Effective C++ 》学习笔记——条款04
- X11 window program basic
- 【DP】 HDU 5092 Seam Carving
- 作为学生,我是怎么半年赚到人生第一个三十万的
- poj 2528
- 【二分匹配】 HDU 5093 Battle ships 经典二分题
- Java虚拟机类加载原理
- HDU 1800
- 《程序员面试宝典》学习笔记(1)
- 指南针
- 1009. Mersenne Composite N
- Jackson解析json API和实现分析
- 【搜索】 HDU 5094 Maze 状压
- hdu 5091 给定矩形覆盖尽量多点 扫描线+线段树