HDU 3488 Tour(二分图最优匹配:有向环覆盖)
来源:互联网 发布:vb正则表达式语法 编辑:程序博客网 时间:2024/05/21 08:01
题意:给你一个N个顶点M条边的带权有向图,要你把该图分成1个或多个不相交的有向环.且所有定点都被有向环覆盖.问你该有向环所有权值的总和最小是多少?(保证有解)
思路:参照HDU1853
#include<cstdio>#include<cstring>#include<algorithm>#define INF 1e9using namespace std;const int maxn=200+5;struct Max_Match{ int n, W[maxn][maxn]; int Lx[maxn],Ly[maxn]; bool S[maxn],T[maxn]; int left[maxn]; bool match(int i) { S[i]=true; for(int j=1;j<=n;j++)if(Lx[i]+Ly[j]==W[i][j] && !T[j]) { T[j]=true; if(left[j]==-1 || match(left[j])) { left[j]=i; return true; } } return false; } void update() { int a=1<<30; for(int i=1;i<=n;i++)if(S[i]) for(int j=1;j<=n;j++)if(!T[j]) a=min(a, Lx[i]+Ly[j]-W[i][j]); for(int i=1;i<=n;i++) { if(S[i]) Lx[i]-=a; if(T[i]) Ly[i]+=a; } } int solve(int n) { this->n=n; memset(left,-1,sizeof(left)); for(int i=1;i<=n;i++) { Lx[i]=Ly[i]=0; for(int j=1;j<=n;j++) Lx[i]=max(Lx[i], W[i][j]); } for(int i=1;i<=n;i++) { while(true) { for(int j=1;j<=n;j++) S[j]=T[j]=false; if(match(i)) break; else update(); } } int ans=0; for(int i=1;i<=n;i++) ans += W[left[i]][i]; return -ans; }}KM;int main(){ int T; scanf("%d",&T); while(T--) { int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) KM.W[i][j]=-INF; while(m--) { int u,v,w; scanf("%d%d%d",&u,&v,&w); KM.W[u][v]= max(KM.W[u][v], -w); } printf("%d\n",KM.solve(n)); } return 0;}
0 0
- HDU 3488 Tour(二分图最优匹配:有向环覆盖)
- HDU 3488 Tour(二分图最优匹配:有向环覆盖)
- HDU 1853 Cyclic Tour(二分图最优匹配:有向环覆盖)
- HDU 1853 Cyclic Tour(二分图最优匹配:有向环覆盖)
- HDU 1853 Cyclic Tour(二分图最优匹配:有向环覆盖)
- HDU 3435 A new Graph Game(二分图最优匹配:有向环覆盖)
- HDU 3435 A new Graph Game(二分图最优匹配:有向环覆盖)
- HDU 3435 A new Graph Game(二分图最优匹配:有向环覆盖)
- hdu3488——Tour(有向环覆盖,二分图最佳匹配)
- hdu 3488 Tour(二分图的最优匹配)
- HDU 3488 Tour(最小费用流:有向环覆盖)
- hdu 3488 Tour【二分图权匹配】
- Cyclic Tour (最优二分匹配)
- HDU 3488--Tour【最小费用最大流 && 有向环最小权值覆盖 && 经典】
- hdu 3488 Tour (有向环最小权值覆盖,费用流)
- HDU 1853 Cyclic Tour(二分图最优匹配) 解题报告
- hdu - 3488 - Tour(二分图最佳完美匹配)
- HDU 1853--Cyclic Tour【最小费用最大流 && 有向环最小权值覆盖 】
- block 注意事项 和陷阱
- C++虚析构函数
- DuiVision设计器预览版
- TI CC254X函数库说明续(BLE ATT.h)
- 2016年读书计划
- HDU 3488 Tour(二分图最优匹配:有向环覆盖)
- Linux下环境变量设置、查看、删除
- 项目中的代码的包结构
- 初识Unity
- Building Maintainable Software-java篇之Keep Your Codebase Small
- TI CC254X函数库说明续(BLE GAT.H)
- (java) Pow(x, n)
- click小游戏demo
- 关于OSI七层模型详细解释