hdu 2819 求最小顶点覆盖数
来源:互联网 发布:vs.php for vs2015 编辑:程序博客网 时间:2024/06/06 05:56
和其他最小顶点覆盖数题没啥区别
唯一区别是求完之后要交换一下列或者行
将你求得的匹配行或者列交换一下再输出就好
#include<bits/stdc++.h>using namespace std;#define MAX_PATH 1000#define me(a) memset(a,-1,sizeof(a))int top,head[MAX_PATH],f[MAX_PATH],book[MAX_PATH],map1[MAX_PATH][MAX_PATH],l[MAX_PATH],r[MAX_PATH];/*struct node{ int u,next;}e[MAX_PATH];void add(int u,int v){ e[top].u=v; e[top].next=head[u]; head[u]=top++;}*/int n;int dfs(int x){ for(int i=0;i<n;i++) { if(book[i]==-1&&map1[x][i]==1) { book[i]=1; if(f[i]==-1||dfs(f[i])) { f[i]=x; return 1; } } } return 0;}int main(){ while(~scanf("%d",&n)) { //me(head); me(f); memset(map1,0,sizeof(map1)); top=0; int a; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { scanf("%d",&a); map1[i][j]=a; } int ans=0; for(int i=0;i<n;i++) { me(book); if(dfs(i))ans++; } if(ans<n) { printf("-1\n"); continue; } else { int sum=0; for(int i=0;i<n;i++) { if(f[i]==i)continue; for(int j=0;j<n;j++) if(f[j]==i) { swap(f[i],f[j]); l[sum]=i,r[sum++]=j; } } printf("%d\n",sum); for(int i=0;i<sum;i++) { printf("C %d %d\n",l[i]+1,r[i]+1); } } }}
阅读全文
1 0
- hdu 2819 求最小顶点覆盖数
- HDU-1150(求最小覆盖顶点数=二分最大匹配数)
- 匈牙利算法,求最大匹配数即最小顶点覆盖
- 【最小顶点覆盖数】POJ 3041 + POJ 2226+HDU 5093
- 【最小顶点覆盖数 && 无向图】HDU
- HDU 1054 最小顶点覆盖
- HDU 1054 最小顶点覆盖
- hdu 2119 (最小顶点覆盖)
- hdu 1150 (最小顶点覆盖)
- HDU - 1150 最小顶点覆盖
- hdu 1498 最小顶点覆盖
- hdu 1498 最小顶点覆盖
- 求二部图的最小覆盖顶点
- HDU1054Strategic Game(最小顶点覆盖数)
- HDU1054Strategic Game(最小顶点覆盖数)
- HDU 4160 Dolls (最小路径覆盖=顶点数-最大匹配数)
- HDU 4160 最小路径覆盖 = 顶点数 - 最大匹配数 二分匹配
- HDU 1151 Air Raid(最小路径覆盖 = 顶点数 - 最大匹配数)
- Caffe Loss层
- BeanPostProcessor实现Environment获取到自定义properties解决过程
- DNS服务-笔记
- 传智播客-Java学习笔记day14
- Swift 学习笔记01-字符串及运算符
- hdu 2819 求最小顶点覆盖数
- Centos 7配置LAMP
- HTTP协议之multipart/form-data请求分析
- QtWebkits如何向QtWebEngine过渡
- 线性矩阵到底是什么
- 卸载Oracle12c方法
- Maven环境配置和idea创建maven项目
- 分表+分区
- 编程笔试题