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条路,包含的信息有路连接的地方,以及路的长度,路是双向的,但 ...
随机推荐
- Moebius集群:SQL Server一站式数据平台
一.Moebius集群的架构及原理 1.无共享磁盘架构 Moebius集群采用无共享磁盘架构设计,各个机器可以不连接一个共享的设备,数据可以存储在每个机器自己的存储介质中.这样每个机器就不需要硬件上的 ...
- 【OpenStack】OpenStack系列14之Dashboard定制开发
django概述 参考资料:http://blog.javachen.com/2014/01/11/how-to-create-a-django-site.html http://djangobook ...
- sass的视频教程
http://www.w3ci.com/video/715.html http://koala-app.com/index-zh.html /***************三角形的应用******** ...
- css3 变形(transform)、转换(transition)和动画(animation)
http://www.w3cplus.com/content/css3-transform/ 在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放scale和移动tr ...
- MQTT——安装、测试
MQTT学习笔记——MQTT协议体验 Mosquitto安装和使用 http://blog.csdn.net/xukai871105/article/details/39252653 ...
- CSS用类选择器在本页写样式
<title>静夜思</title><style type="text/css">p{color:#ff0000; font-size:24px ...
- jquery 常用类别选择器
1.$('#showDiv'): id选择器,相当于javascript中的documentgetElementById("showDiv"); 2.$("onecla ...
- js判空
2014年9月3日 11:36:10 转载的: http://blog.sina.com.cn/s/blog_755168af0100vsik.html typeof用法 typeof的运算数未定义, ...
- Java入门的程序汇总
Java入门的基础程序,虽然很简单,也要多练习,下面有重点的总结一下 1.HelloWorld这个不说了 2.常量与变量部分 基本数据类型使用 public class Javashujuleixin ...
- 用php实现遍历目录
用php实现的遍历目录,只遍历第一层,如果制作在线文件管理器的话很管用,不同目录只加一个超链接就行了,然后给方法传递参数就行了,遍历目录的类如下: class Ergodic{ public func ...