BZOJ3118 : Orz the MST
对于树边显然只需要减少权值,对于非树边显然只需要增加权值
设i不为树边,j为树边
X[i]:i增加量
X[j]:j减少量
C[i]:修改1单位i的代价
对于每条非树边i(u,v),在树上u到v路径上的所有边j都需要满足
$W_i+X_i\geq W_j-X_j$
即
$X_i+X_j\geq W_j-W_i$
最后我们要最小化$\sum C_iX_i$
将矩阵转置,得到对偶问题,用线性规划单纯形法求解
#include<cstdio>
#define rep(i,l,n) for(int i=l;i<=n;i++)
const int N=1001,M=4000,inf=~0U>>2;
int n,m,a[N][M],nxt[M],s,t,c,nn;
int g[N],Nxt[N],v[N],ed,pre[N],id[N][N],head,tail,q[N];
inline void cal(int l,int e){
a[l][e]=-1;t=M-1;
rep(i,0,m)if(a[l][i])nxt[t]=i,t=i;nxt[t]=-1;
rep(i,0,n)if(i!=l&&(t=a[i][e])){
a[i][e]=0;
for(int j=nxt[M-1];~j;j=nxt[j])a[i][j]+=a[l][j]*t;
}
}
int work(){
for(;;){int min=inf,l=0,e=0;
rep(i,1,m)if(a[0][i]>0){e=i;break;}
if(!e)return a[0][0];
rep(i,1,n)if(a[i][e]<0&&a[i][0]<min)min=a[i][0],l=i;
cal(l,e);
}
}
struct Edge{int u,v,w,f,a,b,c;}E[N];
inline void add(int x,int y,int z){v[++ed]=y;id[x][y]=z;Nxt[ed]=g[x];g[x]=ed;}
inline void bfs(int X,int y,int z){
int i,x;
for(i=1;i<=nn;i++)pre[i]=0;
q[head=tail=0]=X;
while(head<=tail)for(i=g[x=q[head++]];i;i=Nxt[i])if(!pre[v[i]]&&v[i]!=X)pre[q[++tail]=v[i]]=x;
for(;pre[y];y=pre[y]){
++m;
i=id[y][pre[y]];
a[z][m]=a[i][m]=-1;
a[0][m]=E[i].w-E[z].w;
}
}
int main(){
scanf("%d%d",&nn,&n);
rep(i,1,n){
scanf("%d%d%d%d%d%d",&E[i].u,&E[i].v,&E[i].w,&E[i].f,&E[i].a,&E[i].b);
E[i].c=E[i].f?E[i].b:E[i].a;
if(E[i].f)add(E[i].u,E[i].v,i),add(E[i].v,E[i].u,i);
}
rep(i,1,n)if(!E[i].f)bfs(E[i].u,E[i].v,i);
rep(i,1,n)a[i][0]=E[i].c;
return printf("%d",work()),0;
}
BZOJ3118 : Orz the MST的更多相关文章
- BZOJ3118 Orz the MST 【单纯形 + 生成树】
题目链接 BZOJ3118 题解 少有的单纯形好题啊 我们先抽离出生成树 生成树中的边只可能减,其它边只可能加 对于不在生成树的边,其权值一定要比生成树中其端点之间的路径上所有的边都大 然后就是一个最 ...
- bzoj3118: Orz the MST(线性规划+单纯形法)
传送门 不难发现,对于每一条树边肯定要减小它的权值,对于每一条非树边要增加它的权值 对于每一条非树边\(j\),他肯定与某些树边构成了一个环,那么它的边权必须大于等于这个环上的所有边 设其中一条边为\ ...
- bzoj 3118: Orz the MST(单纯形)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3118 题意:给出一个图以及图中指定的n-1条边组成的生成树.每条边权值加1或者减去 ...
- BZOJ 3118 Orz the MST
权限题qwq 如果我们要使得某棵生成树为最小生成树,那么上面的边都不能被替代,具体的,对于一个非树边,它的权值要\(\ge\)它两端点在树上的路径上的所以边的权值,所以对于每个非树边就可以对一些树边列 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- POJ1679The Unique MST(次小生成树)
The Unique MST Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25203 Accepted: 8995 D ...
- HDU5627--Clarke and MST (bfs+位运算)
http://www.cnblogs.com/wenruo/p/5188495.html Clarke and MST Time Limit: 2000/1000 MS (Java/Others) M ...
- MST系列
1.POJ2485 Highways 蛮水的 数组一开始开小了卡了一会儿 我可能是个傻逼 #include<iostream> #include<cstdio> #includ ...
- poj 1639 Picnic Planning 度限制mst
https://vjudge.net/problem/POJ-1639 题意: 有一群人,他们要去某一个地方,每个车可以装无数个人,给出了n条路,包含的信息有路连接的地方,以及路的长度,路是双向的,但 ...
随机推荐
- [LA3026]Period
[LA3026]Period 试题描述 For each prefix of a given string S with N characters (each character has an ASC ...
- 用chrome模拟微信浏览器访问需要OAuth2.0网页授权的页面
现在很流行微信网页小游戏,用html5制作的小游戏移过来,可以放到微信浏览器中打开,关键是可以做成微信分享朋友圈的形式,大大提高游戏的传播,增强好友的游戏互动. 微信浏览器中打开网页游戏效果还不错,对 ...
- 每天一个linux命令day2【ss命令】
ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信 ...
- mysql中binary相加的问题
我在mysql中有这样一段代码 SQL code ? 1 2 3 4 5 6 7 8 declare @byte1 binary(1) declare @byte2 binary(1) decla ...
- Ubuntu删除history记录
history -c就是清除本次登录到目前所执行的命令 转自: http://www.linuxdiyf.com/viewarticle.php?id=189355
- jQuery backgroundColor的animate效果
我们知道jQuery几乎是我们最常用的javascript库了,不过尽管他自己本身拥有大量的特效,但却仍然缺少一些动画效果.比如说,颜色.背景颜色的变换. animate一般只支持大小,位置,透明度的 ...
- iOS 中constraint 不等于约束和低优先级约束使用的简单体会
看了些文章发现,在使用constraint时,不等于约束往往是和低优先级约束成对使用的,这样才能实现他们的效果. 看看例子 下面是在3.5存屏幕下的效果 图1,竖屏,在满足>=50的前提下,可以 ...
- 数据库路由器 ICX
实时并发数据库事务处理同步复制器和负载平衡器 ———通向真正数据库高可用性,高可靠性,高性能之路 一.产品概述 数据库路由器--ICX是美国宾夕法尼亚大学计算机系施教授经过多年研究.开发出 ...
- codeforces B. The Fibonacci Segment 解题报告
题目链接:http://codeforces.com/problemset/problem/365/B 题目意思:简单来说,就是要找出最长的斐波纳契长度. 解决的方法不难,但是要注意更新左区间和右区间 ...
- 项目总结(二)--- CocoaPods的简单介绍与使用
先谈下,我们为什么要使用CocoaPods,它能为我们做什么吧. 所有开发过iOS应用的小伙伴们都知道,在整个项目中,第三方库的引用必不可少(特别感谢那些优秀第三方开源库的作者,给我们提供了多大的便捷 ...