hdu 3360(最小覆盖)
来源:互联网 发布:2017年淘宝有多少用户 编辑:程序博客网 时间:2024/05/09 22:13
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3360
思路:最小覆盖==最大匹配。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 using namespace std; 7 #define MAXN 3333 8 vector<int>vet[MAXN]; 9 int map[MAXN][MAXN];10 int ly[MAXN];11 bool mark[MAXN];12 int n,m;13 int dir[12][2]={-1,-2,-2,-1,-2,1,-1,2,1,2,2,1,2,-1,1,-2,-1,0,0,1,1,0,0,-1};14 15 bool Judge(int x,int y){16 if(x>=1&&x<=n&&y>=1&&y<=m)17 return true;18 return false;19 }20 21 int dfs(int u)22 {23 for(int i=0;i<vet[u].size();i++){24 int v=vet[u][i];25 if(!mark[v]){26 mark[v]=true;27 if(ly[v]==-1||dfs(ly[v])){28 ly[v]=u;29 return 1;30 }31 }32 }33 return 0;34 }35 36 int MaxMatch()37 {38 int res=0;39 memset(ly,-1,(n*m+2)*sizeof(int));40 for(int i=1;i<=n*m;i++){41 memset(mark,false,(n*m+2)*sizeof(mark[0]));42 res+=dfs(i);43 }44 return res;45 }46 47 48 int main()49 {50 // freopen("1.txt","r",stdin);51 int t=1;52 while(scanf("%d%d",&n,&m),(n+m)){53 for(int i=1;i<=n*m;i++)vet[i].clear();54 for(int i=1;i<=n;i++)55 for(int j=1;j<=m;j++)56 scanf("%d",&map[i][j]);57 for(int i=1;i<=n;i++)58 {59 for(int j=1;j<=m;j++)60 {61 if(map[i][j]!=-1){62 for(int k=0;k<12;k++){63 if((map[i][j]>>k)&1){64 int x=i+dir[k][0];65 int y=j+dir[k][1];66 if(Judge(x,y)&&map[x][y]!=-1){67 vet[(i-1)*m+j].push_back((x-1)*m+y);68 vet[(x-1)*m+y].push_back((i-1)*m+j);69 }70 }71 }72 }73 }74 }75 int ans=MaxMatch();76 printf("%d. %d\n",t++,ans/2);77 }78 return 0;79 }
0 0
- hdu 3360(最小覆盖)
- hdu 1528+hdu 1962(最小覆盖)
- hdu 3360 National Treasures(最小顶点覆盖,黑白染色)
- HDU 1350(最小路径覆盖)
- hdu 3991(最小路径覆盖)
- hdu 1150 Machine Schedule (最小覆盖)
- hdu 2119 Matrix (最小覆盖)
- hdu 3335 (最小路径覆盖)
- hdu 1498 (最小顶点覆盖)
- hdu 1054(最小顶点覆盖)
- hdu 3335(最小路径覆盖)
- hdu 4160(最小路径覆盖)
- hdu 1150(最小点覆盖)
- hdu 1350+hdu 1960(最小路径覆盖)
- HDU 1054 最小顶点覆盖
- HDU 1054 最小顶点覆盖
- 【最小路径覆盖】HDU 4160
- hdu 1498 最小覆盖点数
- hdu 4424
- 并查集小结
- hdu 2065(递推+矩阵乘法)
- hdu 4179(有限制的最短路)
- MVC访问Oracle数据库示例
- hdu 3360(最小覆盖)
- hdu 3118(二进制枚举)
- hdu 2389(最大匹配bfs版)
- hdu 1669(二分+多重匹配)
- hdu 1526(最大匹配)
- hdu 2413(最大匹配+二分)
- pku 1703(种类并查集)
- shell批量kill
- pku 1182(种类并查集)