UVA 12549(p381)----Sentry Robots
2016-02-27 14:06
435 查看
#include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<algorithm> using namespace std; const int maxn=1100; struct point { int x,y; }; point mm[maxn][maxn]; int from[maxn],use[maxn]; int Map[maxn][maxn]; int n,m,t,numx,numy; //vector<int> g[maxn]; int g[maxn][maxn]; int vis[maxn]; void make() { numx=0,numy=0; for(int i=1; i<=n; i++) { int flag=1; for(int j=1; j<=m; j++) { if(Map[i][j]==1) { if(flag) numx++; mm[i][j].x=numx; flag=0; } else if(Map[i][j]==2) flag=1; } } for(int j=1; j<=m; j++) { int flag=1; for(int i=1; i<=n; i++) { if(Map[i][j]==1) { if(flag) numy++; mm[i][j].y=numy; flag=0; } else if(Map[i][j]==2) flag=1; } } for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) { if(Map[i][j]==1) { g[mm[i][j].x][mm[i][j].y+numx]=1; } } } bool dfs(int u) { for(int v = numx; v <=numx+numy; v++) if(g[u][v] && !vis[v]) { vis[v] = true; if(from[v] == -1 || dfs(from[v])) { from[v] = u; return true; } } return false; } int hungary() { int ans = 0; memset(from, -1, sizeof(from)); for(int u = 1; u <=numx; u++) { memset(vis, false, sizeof(vis)); if(dfs(u)) ans++; } return ans; } int main() { scanf("%d",&t); while(t--) { int num,x,y; memset(mm,0,sizeof(mm)); memset(Map,0,sizeof(Map)); memset(g,0,sizeof(g)); scanf("%d%d",&n,&m); scanf("%d",&num); for(int i=0; i<num; i++) { scanf("%d%d",&x,&y); Map[x][y]=1; } scanf("%d",&num); for(int i=0; i<num; i++) { scanf("%d%d",&x,&y); Map[x][y]=2; } make(); printf("%d\n",hungary()); } return 0; }
相关文章推荐
- JNI引起的堆外内存泄漏问题分析
- Java概述--Java开发实战经典
- 数据结构之单链表——带头节点和不带头节点(C/C++)
- keepalive 在openstack nova kvm中的应用
- ui-router参数传递问题
- UVA 12545(p253)----Bits Equalizer
- YUV格式全解
- 数组实战演练
- iOS block
- list,map,array理解
- 纳新宣传网页总结
- Java&Xml教程(十一)JAXB实现XML与Java对象转换
- Java&Xml教程(十一)JAXB实现XML与Java对象转换
- Java&Xml教程(十一)JAXB实现XML与Java对象转换
- HyperDex学习笔记
- 三层结构浅析
- UVA 12325(p210)----Zombie's Treasure Chest
- nefu Not Fibonacci 457 (矩阵连乘)
- 神经网络分类
- (GOF23设计模式)_代理模式_动态代理