poj 2594(二分图)
Posted 发牌员
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 2594(二分图)相关的知识,希望对你有一定的参考价值。
二分图最小路径覆盖=顶点数-最大匹配数。这里还要跑个floyd,因为一个点可以走两遍,匹配的数目可以再增加。
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> using namespace std; const int maxn=500+100; int g[maxn][maxn]; int gg[maxn]; int vis[maxn]; int n,m; void flood() { for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(g[i][k]&&g[k][j]) g[i][j]=1; } bool dfs_x(int x) { for(int i=1;i<=n;i++) if(!vis[i]&&g[x][i]) { vis[i]=1; if(!gg[i]||dfs_x(gg[i])) { gg[i]=x; return true; } } return false; } int main() { while(~scanf("%d%d",&n,&m)&&(n+m)) { memset(g,0,sizeof(g)); memset(gg,0,sizeof(gg)); int a,b; for(int i=1;i<=m;i++) { scanf("%d%d",&a,&b); g[a][b]=1; } flood(); int ans=0; for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(dfs_x(i)) ans++; } printf("%d\n",n-ans); } return 0; }
以上是关于poj 2594(二分图)的主要内容,如果未能解决你的问题,请参考以下文章
poj 2594 Treasure Exploration(最小路径覆盖,可重点)
POJ 2594 Treasure Exploration(最小路径覆盖变形)