POJ2594(二分匹配+Floyd求传递闭包)
2013-03-09 20:39
302 查看
题目:Treasure Exploration
很明显是最小路径覆盖,只是必须先要求传递闭包就行了。
很明显是最小路径覆盖,只是必须先要求传递闭包就行了。
#include <stdio.h> #include <string.h> #define N 510 int uN,vN; int g ; int linker ; bool used ; bool DFS(int u) { int v; for(v=0;v<vN;v++) { if(g[u][v]&&!used[v]) { used[v]=true; if(linker[v]==-1||DFS(linker[v])) { linker[v]=u; return true; } } } return false; } int Hungary() { int u; int ret=0; memset(linker,-1,sizeof(linker)); for(u=0;u<uN;u++) { memset(used,false,sizeof(used)); if(DFS(u)) ret++; } return ret; } void Floyd(int n) { int i,j,k; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(g[i][j]==0) { for(k=0;k<n;k++) { if(g[i][k]==1&&g[k][j]==1) { g[i][j]=1; break; } } } } } } int main() { int n,m; int u,v; while(~scanf("%d%d",&n,&m)) { if(n==0&&m==0) break; uN=vN=n; memset(g,0,sizeof(g)); while(m--) { scanf("%d%d",&u,&v); u--;v--; g[u][v]=1; } Floyd(n); int ans=Hungary(); printf("%d\n",n-ans); } return 0; }
相关文章推荐
- poj 2594 Treasure Exploration(可重点最小路径覆盖)(二分匹配+Floyd求传递闭包)
- Treasure Exploration (POJ_2594) 可重复用点的最大匹配 FLOYD+dfs匈牙利
- POJ2594(二分匹配+Floyd求传递闭包)
- poj 2594 Treasure Exploration 匈牙利二分匹配+floyd
- poj2112Optimal Milking【floyd最短路+二分图多重匹配+二分】
- POJ 2594 Treasure Exploration(最小路径覆盖+Floyd求传递闭包)
- poj 2594 Treasure Exploration (二分匹配)
- POJ 2112 Optimal Milking(多重匹配+floyd+二分枚举)
- POJ 2594 最小路径覆盖 二分匹配
- POJ 2112—— Optimal Milking——————【多重匹配、二分枚举答案、floyd预处理】
- POJ 2594 最大二分匹配 最小路径覆盖
- poj 2594 Treasure Exploration 二分匹配
- poj1087 A Plug for UNIX 二分匹配+floyd
- poj 2594 Treasure Exploration(最小路径覆盖/二分最大匹配)
- POJ 1325 Machine Schedule (最大二分匹配)
- POJ 3660 Cow Contest (Floyd 传递闭包)
- POJ 1274 The Perfect Stall(最大二分匹配)
- POJ 2391 最大流 二分 拆点 floyd
- POJ 2594 Treasure Exploration【传递闭包+最小路径覆盖】
- poj 2060 Taxi Cab Scheme (二分匹配)