HUST 1027 Enemy Target! 最小点覆盖集
来源:互联网 发布:用友u8数据库不符合 编辑:程序博客网 时间:2024/06/05 16:05
- 看题意就会知道这个是二分匹配模型,转化一下,将行数变成X集合,列数变成Y集合,某一点(i,j)为1的话,将i和j连一条边
- 所以求的是最小点覆盖集,等于最大匹配数
- 最后是找出点覆盖集,对于每一条边,肯定有一点属于覆盖记得,所以对于边i-j,如果j没有匹配,那么i肯定是答案,之后再循环一遍,将所有的结果保存并输出
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <stack>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>using namespace std;const int MAXN=3000+5;const int INF=1<<28;int g[MAXN][MAXN],Mx[MAXN],My[MAXN],Nx,Ny;int dx[MAXN],dy[MAXN],dis;bool vst[MAXN];bool searchP(){ queue<int>Q; dis=INF; memset(dx,-1,sizeof(dx)); memset(dy,-1,sizeof(dy)); for(int i=1;i<=Nx;i++) if(Mx[i]==-1) { Q.push(i); dx[i]=0; } while(!Q.empty()) { int u=Q.front(); Q.pop(); if(dx[u]>dis) break; for(int v=1;v<=Ny;v++) if(g[u][v]&&dy[v]==-1) { dy[v]=dx[u]+1; if(My[v]==-1) dis=dy[v]; else { dx[My[v]]=dy[v]+1; Q.push(My[v]); } } } return dis!=INF;}bool DFS(int u){ for(int v=1;v<=Ny;v++) if(!vst[v]&&g[u][v]&&dy[v]==dx[u]+1) { vst[v]=1; if(My[v]!=-1&&dy[v]==dis) continue; if(My[v]==-1||DFS(My[v])) { My[v]=u; Mx[u]=v; return 1; } } return 0;}int MaxMatch(){ int res=0; memset(Mx,-1,sizeof(Mx)); memset(My,-1,sizeof(My)); while(searchP()) { memset(vst,0,sizeof(vst)); for(int i=1;i<=Nx;i++) if(Mx[i]==-1&&DFS(i)) res++; } return res;}char s[1024];int main(){ int p,n,m,i,j,t; while(~scanf("%d%d%d",&n,&m,&p)) { memset(g,0,sizeof(g)); for(i=0;i<n;i++) { scanf("%s",s); for(j=0;j<m;j++) g[i+1][j+1]=s[j]-'0'; } Nx=n; Ny=m; t=MaxMatch(); if(t>p) printf("NOT ENOUGH TANK\n"); else { printf("%d\n",t); int r[1024],c[1024]; memset(r,0,sizeof(r)); memset(c,0,sizeof(c)); for(i=1;i<=n;i++) for(j=1;j<=m;j++) { if(g[i][j]&&My[j]==-1) r[i]=1; } for(i=1;i<=n;i++) for(j=1;j<=m;j++) { if(g[i][j]) { if(!r[i]) c[j]=1; } } printf("ROW:"); for(i=1;i<=n;i++) if(r[i]) printf(" %d",i); printf("\n"); printf("COLUMN:"); for(i=1;i<=m;i++) if(c[i]) printf(" %d",i); printf("\n"); } } return 0;}
0 0
- HUST 1027 Enemy Target! 最小点覆盖集
- HUST 1027 Enemy Target!
- 最小路径覆盖,最小点覆盖,最大独立点集
- 最小路径覆盖,最小点覆盖,最大独立点集
- pku2226 最小点集覆盖,行列覆盖
- 行列覆盖,最小点集覆盖
- 最小点集覆盖圆
- 点集最小覆盖圆
- 最小覆盖点集模板
- 最小点集覆盖/HDU2119
- 最小路径覆盖,最小点覆盖,最大独立点集,最小边覆盖
- 最大独立集 最小点覆盖 最小边覆盖 最小路径覆盖 最大团
- 最小点覆盖,最小边覆盖,最大匹配,最小路径覆盖,最大独立集总结。
- poj 1325(最小点覆盖集)
- HDU1150 (最小点集覆盖)
- HDU2119Matrix(最小点集覆盖)
- Hdu1054 Strategic Game(最小覆盖点集)
- 最小点覆盖集之例题
- 2016.1.26寒假训练赛1
- ?12星座综合实力排行,第一名居然是他……
- Android中关于键盘的处理
- JPA学习笔记(2)之相关接口/类
- MR-4.MapReduce使用压缩
- HUST 1027 Enemy Target! 最小点覆盖集
- hdu2795
- Socket通信之一次通路多次会话问题
- 南邮2016年非线性系统与混沌控制试题(答案)
- 分类器组合方法
- hadoop 第一个程序 wordcount 详解
- ehcache+spring配置
- MR-5.MapReduce计数器介绍
- sqlserver2005T-SQL查询语句的逻辑查询处理1