[Loj]#6002. 「网络流 24 题」最小路径覆盖
2017-07-09 23:25
411 查看
题意如题名,最小路径覆盖。
答案为点数减去最大匹配。
用匈牙利直接跑。
答案为点数减去最大匹配。
用匈牙利直接跑。
#include <cstdio> #include <cstring> #include <vector> using namespace std; const int N=205; int n,m; int map ; int fr ; int vis ; int sum; int in ; int le; int fa ; vector <int > path ; int get(int x) { return x==fa[x]?x:fa[x]=get(fa[x]); } void me(int x,int y) { int fx=get(x),fy=get(y); fa[fx]=fy; } bool find(int x) { for (int i=1;i<=n;i++) { if (map[x][i]&&!vis[i]) { vis[i]=1; if (!fr[i]||find(fr[i])) {fr[i]=x;return 1;} } } return 0; } int main() { register int i,j; scanf("%d %d",&n,&m); for (i=1;i<=m;i++) { int x,y; scanf("%d %d",&x,&y); map[x][y]=1; } for (i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if (find(i)) sum++; } //memset(vis,0,sizeof(vis)); for (i=1;i<=n;i++) fa[i]=i; for (i=1;i<=n;i++) { if (fr[i]) if (fa[i]!=fa[fr[i]]) me(i,fr[i]); } for (i=1;i<=n;i++) { path[fa[i]].push_back(i); } for (i=1;i<=n;i++) { if (path[i].size()) { for (j=0;j<path[i].size();j++) { printf("%d ",path[i][j]); } printf("\n"); } } printf("%d",n-sum); }
相关文章推荐
- [LOJ.AC]#6002. 「网络流 24 题」最小路径覆盖
- 【LOJ】6002 「网络流 24 题」最小路径覆盖 二分图
- loj 6002 「网络流 24 题」最小路径覆盖
- 【loj】#6002. 「网络流 24 题」最小路径覆盖
- LOJ 6002「网络流 24 题」最小路径覆盖
- Luogu 2764 最小路径覆盖问题 / Libre 6002 「网络流 24 题」最小路径覆盖 (网络流,最大流)
- [网络流24题] 03 最小路径覆盖问题(有向无环图最小路径覆盖,网络最大流)
- [网络流24题][CODEVS1904]最小路径覆盖问题(最大流||匈牙利算法)
- 【网络流24题】最小路径覆盖
- LOJ6002 「网络流 24 题 - 3」 最小路径覆盖 坠小路径覆盖数 二分图坠大匹配
- loj6002「网络流 24 题」最小路径覆盖(最小路径覆盖+二分图最大匹配)
- 【网络流24题】最小路径覆盖问题
- 【网络流24题】No.4 魔术球问题 (二分+最小路径覆盖)
- 网络流24题 最小路径覆盖问题
- COGS728.[网络流24题]最小路径覆盖问题:网络流
- COGS 728. [网络流24题] 最小路径覆盖问题
- 【线性规划与网络流24题 3】最小路径覆盖
- [网络流24题] 04 魔术球问题 (有向无环图最小路径覆盖, 最大流)
- [网络流24题]魔术球问题 贪心||枚举答案+最小路径覆盖
- [网络流24题] 最小路径覆盖问题