hdu 4185 Oil Skimming (二分匹配)
2012-11-27 20:53
489 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4185
题意,在一个N*N的矩阵里寻找最多有多少个“##”(横着竖着都行)。
KM二分匹配就不说了。
刚开始不会建图,最多有600*600个“#”,那岂不是要开600*600*600*600的数组Orz.....
不过事实证明我想多了,数据没那么狠!
题意,在一个N*N的矩阵里寻找最多有多少个“##”(横着竖着都行)。
KM二分匹配就不说了。
刚开始不会建图,最多有600*600个“#”,那岂不是要开600*600*600*600的数组Orz.....
不过事实证明我想多了,数据没那么狠!
#include<stdio.h> #include<vector> #include<string.h> #include<algorithm> using namespace std; int map[700][700],p[700][700],vis[700],x[700],y[700],t,n,num,k; char s[700][700]; bool search(int i) { int j; for(j=0;j<num;j++) { if(map[i][j]&&!vis[j]) { vis[j]=1; if(!y[j]||search(y[j])) { y[j]=i; x[i]=j; return true; } } } return false; } int match() { memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); int ans=0; for(int i=0;i<num;i++) { memset(vis,0,sizeof(vis)); if(search(i)) ans++; } return ans/2;//无向图,要除以2 } int main() { scanf("%d",&t); k=1; while(t--) { int i,j; num=0; memset(map,0,sizeof(map)); scanf("%d",&n); for(i=0;i<n;i++) scanf("%s",s[i]); for(i=0;i<n;i++) for(j=0;j<n;j++) if(s[i][j]=='#') p[i][j]=num++; for(i=0;i<n;i++) for(j=0;j<n;j++) { if(s[i][j]=='#') { if(j<n-1&&s[i][j+1]=='#') { map[p[i][j]][p[i][j+1]]=1; map[p[i][j+1]][p[i][j]]=1; } if(i<n-1&&s[i+1][j]=='#') { map[p[i][j]][p[i+1][j]]=1; map[p[i+1][j]][p[i][j]]=1; } } //map[i][j]='.'; } int p=match(); printf("Case %d: %d\n",k++,p); } return 0; }
相关文章推荐
- HDU-4185-Oil Skimming [二分匹配]
- 【二分匹配】hdu 4185 Oil Skimming
- HDU 4185 Oil Skimming (二分匹配)
- HDU 4185 Oil Skimming ( 二分匹配建图 )
- hdu 4185 Oil Skimming 二分匹配
- HDU 4185 Oil Skimming(二分匹配,匈牙利算法)
- HDU - 4185 —— Oil Skimming —— 二分匹配
- HDU 4185 — Oil Skimming 二分匹配
- hdu 4185 Oil Skimming【二分匹配】
- hdu 4185 Oil Skimming(最大匹配)
- hdu 4185 Oil Skimming(最大匹配)
- HDU 4185 Oil Skimming(二分图最大匹配)
- hdu 4185 Oil Skimming(最大匹配)
- hdu 4185 (Oil Skimming) 奇偶匹配
- HDU 4185 Oil Skimming(最大匹配)
- HDU 4185 二分匹配 1*2方格个数
- hdu 4185 Oil Skimming (最大匹配)
- HDU 4185 Oil Skimming (最大匹配)
- HDU 4185 Oil Skimming(二分图最大匹配)
- HDU 4185 Oil Skimming 【离散化二分匹配 黑白染色】