POJ 3020Antenna Placement(二分最大匹配之最大匹配)
来源:互联网 发布:淘宝网站设计风格 编辑:程序博客网 时间:2024/04/29 15:40
题目地址:http://poj.org/problem?id=3020
题目很简单,最大匹配。先进行黑白染色(后来才发现原来那种按照横纵坐标之和的奇偶性匹配的方法叫做黑白染色。。),然后匹配。只需要在最后的时候求出最大匹配,然后再把剩下的单个的加上就是最终答案。
#include <iostream>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <queue>#include <map>#include<algorithm>using namespace std;int tu[50][50], mp[500][500], vis[500], link[500], k1, k2, a[500], b[500];int jx[]= {0,0,1,-1};int jy[]= {1,-1,0,0};int dfs(int x){ int i; for(i=0; i<k2; i++) { if(!vis[i]&&mp[x][b[i]]) { vis[i]=1; if(link[b[i]]==-1||dfs(link[b[i]])) { link[b[i]]=x; return 1; } } } return 0;}void hungary(int k0){ int i, ans=0; memset(link,-1,sizeof(link)); for(i=0; i<k1; i++) { memset(vis,0,sizeof(vis)); if(dfs(a[i])) ans++; } printf("%d\n",k0-ans);}int main(){ int t, m, n, i, j, k, k0; char s[100]; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); getchar(); k0=0; for(i=0; i<n; i++) { scanf("%s",s); for(j=0; j<m; j++) { if(s[j]=='o') tu[i][j]=0; else { tu[i][j]=1; k0++; } } } k1=k2=0; for(i=0; i<n; i++) { for(j=0; j<m; j++) { if(tu[i][j]) { if((i+j)%2==0) { a[k1++]=m*i+j; } else b[k2++]=m*i+j; } } } memset(mp,0,sizeof(mp)); for(i=0; i<n; i++) { for(j=0; j<m; j++) { if(tu[i][j]) { for(k=0; k<4; k++) { int a=i+jx[k]; int b=j+jy[k]; if(a>=0&&b>=0&&a<n&&b<m&&tu[a][b]) { mp[m*i+j][m*a+b]=1; } } } } } hungary(k0); } return 0;}
0 0
- POJ 3020 Antenna Placement(最大二分匹配)
- POJ 3020Antenna Placement(二分最大匹配之最大匹配)
- POJ 3020 Antenna Placement(二分图的最大匹配)
- POJ 3020 Antenna Placement(二分图的最大匹配)
- poj 3020Antenna Placement(二分最大匹配问题 )
- POJ 3020 Antenna Placement(二分图的最大匹配)
- POJ 3020 Antenna Placement 最大匹配
- POJ 3020 Antenna Placement (二分匹配)
- POJ3020--Antenna Placement--二分图最大匹配
- Antenna Placement(二分图的最大匹配)
- POJ3020——Antenna Placement(二分图最大匹配)
- POJ 3020 Antenna Placement (最小边覆盖/最大匹配应用)
- POJ 3020 Antenna Placement 二分匹配
- poj 3020 Antenna Placement 二分图匹配
- ACM POJ 3020 Antenna Placement 二分匹配
- poj 3020 Antenna Placement 二分图匹配
- poj 3020 Antenna Placement 二分匹配
- poj 3020 Antenna Placement(二分图匹配)
- ubutnu12.04编译Android4.2
- codeforces 379A New Year Candles(水题)
- qobject_cast
- 树莓派相机的python调用
- Hadoop java.lang.OutOfMemoryError: Java heap space的解决方法
- POJ 3020Antenna Placement(二分最大匹配之最大匹配)
- WPF 横印实现
- Python学习笔记:插入排序,希尔排序和堆排序的实现
- 关于子网掩码和反子网掩码的问题
- Java 深复制(深克隆)&浅复制(浅克隆)&原型模式(ProtoType)
- setmjsrttyd的画电都没以的话他一没
- Linux下vi替换字符命令操作实例
- BST树(Binary Search Tree)二叉搜索树
- 在应用层使用ntdll.dll中的未导出函数