hdu 3488
来源:互联网 发布:淘宝怎么看权重 编辑:程序博客网 时间:2024/06/03 17:43
和最少路径的覆盖差不多,先把每个点拆为两个点,分别放在x集合和y集合中,若i->j,那在图中加边xi->yj
每种方案和一个完美匹配是对应的。在完美匹配中每个点在x,y集合中的点都有相匹配的点,也就是每个点入度出度都为1.
二分图最佳完美匹配模板题,只不过求最小,把边的权值改为负数,求最大即可。
不存在的边g[][]赋值为-inf。因为是求权值最大的匹配,保证不存在的边不会选了。
#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#include <cmath>#include <stack>#include <vector>#define LL long long#define myabs(x) ((x)>0?(x):(-(x)))using namespace std;const int inf=0x3f3f3f3f;const int maxn=200+10;int S[maxn],T[maxn];int g[maxn][maxn];int lv[maxn],rv[maxn],leftp[maxn];int slack;int n,m;int match(int u){ S[u]=1; int i; for(i=1;i<=n;i++) { if(lv[u]+rv[i]==g[u][i]) { if(!T[i]) { T[i]=1; if(leftp[i]==-1||match(leftp[i])) { leftp[i]=u; return 1; } } } else slack=min(lv[u]+rv[i]-g[u][i],slack); } return 0;}void update(){ for(int i=1;i<=n;i++) { if(S[i]) lv[i]-=slack; if(T[i]) rv[i]+=slack; }}int solve(){ int i,j; for(i=1;i<=n;i++) { lv[i]=rv[i]=0; for(j=1;j<=n;j++) lv[i]=max(lv[i],g[i][j]); } for(i=1;i<=n;i++) { for(;;) { for(j=1;j<=n;j++) S[j]=T[j]=0; slack=inf; if(match(i)) break; else update(); } } int sum=0; for(i=1;i<=n;i++) sum=sum+lv[i]+rv[i]; return sum;}int main(){ int T; cin>>T; while(T--) { scanf("%d%d",&n,&m); int i,u,v,val; memset(g,-inf,sizeof(g)); memset(leftp,-1,sizeof(leftp)); for(i=0;i<m;i++) { scanf("%d%d%d",&u,&v,&val); if(-val>g[u][v]) g[u][v]=-val; } int ans=-solve(); printf("%d\n",ans); } return 0;}
- hdu 3488
- hdu 3488
- hdu 3488
- hdu 3488 && hdu 3435 && 1853
- hdu 1853 | hdu 3488 | hdu3435
- HDU 3488 HDU 3435 HDU 1853 | 费用流
- hdu 3488 Tour【KM】同hdu 1853
- HDU 1853 Cyclic Tour & HDU 3488 Tour
- hdu 3488 Tour (KM)
- hdu(3488)Tour
- tour hdu 3488 KM
- hdu 3488 Tour KM
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- 正向代理和方向代理的异同点
- 输入一段字符串,把其全部转换成大写字母
- hibernate 的 使用 MyEclipse 工具生成 POJO 类和映射文件*.hbm.xml
- 游戏开发中常用的设计模式
- POJ 2253 floyd 最短路
- hdu 3488
- 那些人,珍重便好
- MSSQL 日期相关操作
- 在Spring、Hibernate中使用Ehcache缓存
- Yeslab现任明教教主数据中心Nexus课程 视频教程 下载
- linux 免密码 ssh 互相连接
- linux c 关闭回显
- 2013-08-18
- 黑马程序员---汉字转拼音