UVA - 11419 SAM I AM
来源:互联网 发布:表示公司的顶级域名 编辑:程序博客网 时间:2024/06/05 16:15
和击毁小行星的那道题是一样的,只不过这道题要输出路径。
最小点覆盖 = 最大匹配数
求一个最小覆盖点集
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N=1111;int n1,n2,k;int mp[N][N],vis[N],link[N];int vis2[N];int v[N];int dfs(int x){ int i; vis2[x]=1; for(i=1; i<=n2; i++) { if(!mp[x][i]&&!vis[i]) { vis[i]=1; if(link[i]==-1||dfs(link[i])) { link[i]=x; return 1; } } } return 0;}int main(){ int i,x,y,s; int cas = 0; while(scanf("%d%d%d",&n1,&n2,&k)&&n1){ s=0; for(int i=1;i<=n1;i++){ for(int j=1;j<=n2;j++){ mp[i][j]=1; } } for(i=0; i<k; i++) { scanf("%d%d",&x,&y); mp[x][y]=0; } memset(link,-1,sizeof(link)); for(i=1; i<=n1; i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) s++; } memset(vis,0,sizeof(vis)); memset(vis2,0,sizeof(vis2)); memset(v,0,sizeof(v)); for(int i=1;i<=n2;i++){ v[link[i]]=1; printf("link[%d] :%d\n",i,link[i]); } for(int i=1;i<=n1;i++){ if(!v[i]) dfs(i); } printf("%d",s); for(int i=1;i<=n1;i++){ if(!vis2[i]) printf(" r%d",i); } for(int i=1;i<=n2;i++){ if(vis[i]) printf(" c%d",i); } puts(""); } return 0;}
0 0
- UVa:11419 SAM I AM
- Uva-11419-SAM I AM
- UVA - 11419 SAM I AM
- UVA - 11419 SAM I AM
- UVA 11419 SAM I AM
- SAM I AM UVA
- UVA 11419 SAM I AM 网络流
- UVA 11419 SAM I AM (二分图,最小割)
- Uva 11419 SAM I AM (最小点覆盖)
- UVA 11419 SAM I AM(最小点覆盖)
- uva 11419 - SAM I AM(最小覆盖)
- UVA 11419SAM I AM (最小点覆盖)
- UVA 11419 SAM I AM 二分匹配最小覆盖点
- UVA 11419 SAM I AM 二分图+最小覆盖点
- UVA 11419 SAM I AM (最小点覆盖)
- uva11419 SAM I AM
- uva11419 SAM I AM
- Uva - 11419 - SAM I AM(二分图最小点覆盖)
- AngularJS学习笔记<1>环境配置
- ZOJ1524
- [LeetCode][Java] Restore IP Addresses
- Median of Two Sorted Arrays
- Java 内存分配浅析
- UVA - 11419 SAM I AM
- Swift2.0语言教程之函数嵌套调用形式
- 运算符的重载
- Linux控制台下的快捷键
- Android 项目代码重构思想总结
- Oracle中查表时,当某列值为null时怎么替代
- 跟我一起写 Makefile(六)
- CSS三种样式
- synchronized和volatile