题目大意:在一个n*m的网格中,有k个目标,现在可以任选一行或列消除在其上的所有目标,求出最少选择次数及选法。

题目分析:经典的最小点覆盖问题,并且输出一个最小点覆盖集。在求出最大匹配之后,以未覆盖的x点进行标记,沿着未覆盖->覆盖->未覆盖->覆盖...的路径标记,最后x中未标记的和y中标记的点构成最小点覆盖集。

代码如下:

# include<iostream>
# include<cstdio>
# include<cstring>
# include<algorithm>
using namespace std;
# define REP(i,s,n) for(int i=s;i<n;++i)
# define CL(a,b) memset(a,b,sizeof(a))
# define CLL(a,b,n) fill(a,a+n,b) const int N=1005;
struct Edge
{
int to,nxt;
};
Edge e[N*N];
int link[N],visx[N],visy[N],vis[2*N],mark[N];
int cnt,n,m,head[N]; void add(int u,int v)
{
e[cnt].to=v;
e[cnt].nxt=head[u];
head[u]=cnt++;
} void dfs1(int x)
{
visx[x]=1;
for(int i=head[x];i!=-1;i=e[i].nxt){
int y=e[i].to;
if(visy[y]) continue;
visy[y]=1;
dfs1(link[y]);
}
} bool dfs(int x)
{
for(int i=head[x];i!=-1;i=e[i].nxt){
int y=e[i].to;
if(vis[y]) continue;
vis[y]=1;
if(link[y]==-1||dfs(link[y])){
link[y]=x;
return true;
}
}
return false;
} int match()
{
int res=0;
REP(i,1,n+1){
CL(vis,0);
if(dfs(i)) ++res;
}
return res;
} int main()
{
int a,b,k;
while(scanf("%d%d%d",&n,&m,&k)&&(n+m+k))
{
cnt=0;
CL(head,-1);
CL(link,-1);
CL(mark,0);
CL(visx,0);
CL(visy,0);
while(k--)
{
scanf("%d%d",&a,&b);
add(a,b);
}
int ans=match();
REP(i,1,m+1) if(link[i]!=-1) mark[link[i]]=1;
REP(i,1,n+1) if(!mark[i]) dfs1(i);
printf("%d",ans);
REP(i,1,n+1) if(!visx[i]) printf(" r%d",i);
REP(i,1,m+1) if(visy[i]) printf(" c%d",i);
printf("\n");
}
return 0;
}

  

最新文章

  1. 通过CSS的border绘制三角形
  2. Jenkins实现生产环境部署文件的回滚操作(Windows)
  3. 表单验证神器——jquery.validate插件
  4. select 通过jq赋值
  5. Windows 一键安装OpenSSL
  6. golang csv,xls,xlsx
  7. apache日志切割
  8. 图解WPF程序打包全过程
  9. tornado项目
  10. 求一组数字序列的分布情况(java)
  11. poj 3753 Training little cats_矩阵快速幂
  12. 算法导论——lec 10 图的基本算法及应用
  13. MSSQL 修改数据库的排序规则
  14. 关于Linux CentOS 7 时区时间修改问题
  15. 常用Atom插件列表
  16. 洛谷P3168 [CQOI2015]任务查询系统
  17. ubuntu垃圾清理命令
  18. navicat里导入和导出.sql文件
  19. win10应用商店打不开,错误代码0x80131500
  20. Java通过NIO实现快速文件拷贝的代码

热门文章

  1. Oracle体系结构之Oracle分区
  2. In ZeroDB, the client is responsible for the database logic. Data encryption, decryption, and compression also happen client side. Therefore, the server never has any knowledge about the data, its str
  3. collectionView itemW宽度计算不对
  4. django的restfulapi
  5. Web开发:URL编码与解码(转)
  6. node核心:异步流程控制
  7. linux服务器查看IO
  8. [ 翻译]ruby rails相关的常见服务器
  9. hdu5184 数论证明
  10. INNODB存储引擎表空间