poj1325 最小顶点覆盖 konig定理
2012-08-11 16:28
225 查看
poj1325 konig定理:最小顶点覆盖=最大匹配数
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define MAXN 505 // 实际问题时需要修改 int mat[MAXN][MAXN]; // 邻接矩阵mat 的0行0列不用 int nx, ny; // 实际问题时矩阵的行列数 int fy[MAXN], matx[MAXN], maty[MAXN]; int DFS( int u ) { int v; for (v=1;v<=ny;v++) if (mat[u][v] && fy[v]<0) { fy[v]=1; if (maty[v]<0 || DFS(maty[v])) { matx[u]=v; maty[v]=u; return 1; } } return 0; } int MaximumMatch( ) { int i, ret=0; memset(matx,-1,sizeof(matx)); memset(maty,-1,sizeof(maty)); for (i=1;i<=nx;i++) if (matx[i]<0) { memset(fy,-1,sizeof(fy)); ret+=DFS(i); } return ret; } int main() { int t,i,j,k,n,m,mm,x,y,z; //scanf("%d",&t); while(scanf("%d",&n) && n) { scanf("%d%d",&m,&t); nx=n;ny=m; memset(mat,0,sizeof(mat)); for(i=1;i<=t;i++) { scanf("%d%d%d",&z,&x,&y); if(x*y!=0)mat[x][y]=1; } /*for(i=1;i<=n;i++){ for(j=1;j<=n;j++) cout<<mat[i][j]<<" "; cout<<endl; }*/ cout<<MaximumMatch( )<<endl; } //system("pause"); return 0; }
相关文章推荐
- poj1325 Machine Schedule 二分匹配之最小顶点覆盖
- POJ1325(最小顶点覆盖)
- Konig定理:最大匹配==最小顶点覆盖
- poj1325(最小顶点覆盖)
- HDU 1054 Strategic Game-二分匹配&最小顶点覆盖
- POJ 2226 Muddy Fields(最小顶点覆盖)
- hdoj 1150 Machine Schedule【匈牙利算法+最小顶点覆盖】
- poj3041 二分图最小顶点覆盖
- HDU 1150 Machine Schedule【最小顶点覆盖】
- poj 2226-二分图的最小顶点覆盖
- 50 years, 50 colors HDU - 1498(最小点覆盖或者说最小顶点匹配)
- 二分图最大匹配与最小顶点覆盖(教程系列)uva11419——我目前关于最大匹配最清晰的解释。
- poj 3041 Asteroids -二分匹配-最小顶点覆盖
- POJ 3041-Asteroids(二分图最小顶点覆盖)
- HDU 1498 50 years, 50 colors(最小顶点覆盖)
- POJ3041.Asteroids——最小顶点覆盖
- HDU 1150 Machine Schedule (匈牙利算法 最小顶点覆盖= 最大匹配数)
- HDOJ---1054 Strategic Game[求最小顶点覆盖-无向图]
- POJ 3020Antenna Placement(二分图最小顶点覆盖)
- 最小权顶点覆盖问题