POJ-2594 Treasure Exploration 最小路径覆盖
2012-11-23 13:46
351 查看
题目链接:http://poj.org/problem?id=2594
裸的最小路径覆盖,直接匈牙利算法啦~
最小路径覆盖=总点数-最大匹配数
裸的最小路径覆盖,直接匈牙利算法啦~
最小路径覆盖=总点数-最大匹配数
//STATUS:G++_AC_1594MS_1700KB #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<iostream> #include<string> #include<algorithm> #include<vector> #include<queue> #include<stack> #include<map> using namespace std; #define LL long long #define Max(a,b) ((a)>(b)?(a):(b)) #define Min(a,b) ((a)<(b)?(a):(b)) #define mem(a,b) memset(a,b,sizeof(a)) #define lson l,mid,rt<<1 #define rson mid+1,r,rt<<1|1 const int MAX=510,INF=200000000; int g[MAX][MAX],y[MAX],vis[MAX]; int n,m; int dfs(int u) { int v; for(v=1;v<=n;v++){ if(g[u][v] && !vis[v]){ vis[v]=1; if(!y[v] || dfs(y[v])){ y[v]=u; return 1; } } } return 0; } int main() { // freopen("in.txt","r",stdin); int i,j,k,u,v,ans; while(~scanf("%d%d",&n,&m) && (n||m)) { ans=0; mem(g,0); mem(y,0); for(i=0;i<m;i++){ scanf("%d%d",&u,&v); g[u][v]=1; } for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) g[i][j]=g[i][j]||(g[i][k] && g[k][j]); for(i=1;i<=n;i++){ mem(vis,0); if(dfs(i))ans++; } printf("%d\n",n-ans); } }
相关文章推荐
- POJ 2594 Treasure Exploration(匈牙利算法—最小路径覆盖 + floyd)
- POJ 2594 Treasure Exploration(最小路径覆盖-hungary+Floyd)
- poj 2594(可相交的最小路径覆盖)
- POJ 2594 可相交的最小路径覆盖
- poj2594 Treasure Exploration【最小路径覆盖】
- POJ 2594 Treasure Exploration (可相交最小路径覆盖)
- K - Treasure Exploration - POJ 2594(最小路径覆盖+闭包传递)
- poj2594——Treasure Exploration(闭包+最小路径覆盖)
- poj2594(可相交最小路径覆盖)
- POJ-2594 Treasure Exploration floyd传递闭包+最小路径覆盖,nice!
- POJ 2594 最小路径覆盖问题
- POJ 2594 Treasure Exploration (可相交最小路径覆盖)
- poj 2594 Treasure Exploration(最小路径覆盖->最大匹配)
- POJ 2594 — Treasure Exploration 最小路径覆盖
- poj2594-Treasure Exploration(最小路径覆盖,最大匹配,floyed(优化))
- POJ 2594 浅谈可相交的二分图DAG最小路径覆盖
- poj 2594 Treasure Exploration (最小路径覆盖+Floyd缩点)
- Treasure Exploration(POJ_2594) -有向图可重复点-最小路径覆盖
- poj 2594 Treasure Exploration 有向无环图最小路径覆盖变形(每个点能走多次)+FLOYD = N-最大匹配
- POJ-2594 Treasure Exploration,floyd+最小路径覆盖!