bzoj3597[Scoi2014]方伯伯运椰子 01分数规划+spfa判负环
3597: [Scoi2014]方伯伯运椰子
Time Limit: 30 Sec Memory Limit: 64 MB
Submit: 594 Solved: 360
[Submit][Status][Discuss]
Description
Input
第一行包含二个整数N,M
Output
一个浮点数,保留二位小数。表示答案,数据保证答案大于0
Sample Input
1 5 13 13 0 412
2 5 30 18 396 148
1 5 33 31 0 39
4 5 22 4 0 786
4 5 13 32 0 561
4 5 3 48 0 460
2 5 32 47 604 258
5 7 44 37 75 164
5 7 34 50 925 441
6 2 26 38 1000 22
Sample Output
HINT
1<=N<=5000
很容易就可以想到01分数规划,然后思考怎么判断是否有可行解
一次完整的修改应该是找两条路径,一条路径容量扩大1,流量扩大1,另一条流量-1,容量缩小1
如果第一条路径上的边为e1,第二条路径上的边为e2,代价就是 $\sum{a_{e1}}+\sum{d_{e1}}-\sum{d_{e2}}+\sum{b_{e2}}$
可以发现这两条路径除掉前面的公共路径之后可以形成一个无向环,并且一条边的扩容、缩容付出的代价是独立的
得到一个思路:建立双向边,正向边权是扩容代价,如果容量上限不为0,反向边权是缩容代价,否则不建反向边
由于题目的答案分式和变化的容量无直接关系,所以容量变化1和变化x是没有区别的,直接检查容量变化1是否可行
01规划判断的时候,把每个环的权值定义为 $边数*mid+\sum边权$
把每条边权值加上mid后找负环,如果存在负环就有可行解,否则没有
#include<bits/stdc++.h>
#define N 5010
using namespace std;
const double eps=1e-;
int n,m,tot,fg,hd[N],vis[N];double d[N];
struct edge{int v,w,next;}e[N<<];
void adde(int u,int v,int w){
e[++tot].v=v;
e[tot].next=hd[u];
e[tot].w=w;
hd[u]=tot;
}
void dfs(int u,double x){
vis[u]=;
if(fg)return;
for(int i=hd[u];i;i=e[i].next){
int v=e[i].v;
if(d[v]>d[u]+x+e[i].w){
d[v]=d[u]+x+e[i].w;
if(vis[v]){fg=;return;}
dfs(v,x);
}
}
vis[u]=;
}
bool check(double x){
fg=;memset(d,,sizeof(d));
memset(vis,,sizeof(vis));
for(int i=;i<=n&&!fg;i++)dfs(i,x);
return fg;
}
int main(){
scanf("%d%d",&n,&m);
n+=;int u,v,a,b,c,d;
for(int i=;i<=m;i++){
scanf("%d%d%d%d%d%d",&u,&v,&a,&b,&c,&d);
adde(u,v,b+d);if(c)adde(v,u,a-d);
}
double l=,r=1e6,mid,ans;
while(l+eps<=r){
mid=(l+r)/;
if(check(mid))l=ans=mid;
else r=mid;
}
printf("%.2lf\n",ans);
return ;
}
bzoj3597[Scoi2014]方伯伯运椰子 01分数规划+spfa判负环的更多相关文章
- BZOJ3597 SCOI2014方伯伯运椰子(分数规划+spfa)
即在总流量不变的情况下调整每条边的流量.显然先二分答案变为求最小费用.容易想到直接流量清空跑费用流,但复杂度略有些高. 首先需要知道(不知道也行?)一种平时基本不用的求最小费用流的算法——消圈法.算法 ...
- bzoj 3597: [Scoi2014]方伯伯运椰子 [01分数规划 消圈定理 spfa负环]
3597: [Scoi2014]方伯伯运椰子 题意: from mhy12345 给你一个满流网络,对于每一条边,压缩容量1 需要费用ai,扩展容量1 需要bi, 当前容量上限ci,每单位通过该边花费 ...
- 【BZOJ3597】方伯伯运椰子(分数规划,网络流)
[BZOJ3597]方伯伯运椰子(分数规划,网络流) 题解 给定了一个满流的费用流模型 如果要修改一条边,那么就必须满足流量平衡 也就是会修改一条某两点之间的路径上的所有边 同时还有另外一条路径会进行 ...
- 2018.09.24 bzoj1486: [HNOI2009]最小圈(01分数规划+spfa判负环)
传送门 答案只保留了6位小数WA了两次233. 这就是一个简单的01分数规划. 直接二分答案,根据图中有没有负环存在进行调整. 注意二分边界. 另外dfs版spfa判负环真心快很多. 代码: #inc ...
- [HNOI2009]最小圈 分数规划 spfa判负环
[HNOI2009]最小圈 分数规划 spfa判负环 题面 思路难,代码简单. 题目求圈上最小平均值,问题可看为一个0/1规划问题,每个边有\(a[i],b[i]\)两个属性,\(a[i]=w(u,v ...
- POJ 3621 Sightseeing Cows 【01分数规划+spfa判正环】
题目链接:http://poj.org/problem?id=3621 Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total ...
- BZOJ3597 [Scoi2014]方伯伯运椰子 【二分 + 判负环】
题目链接 BZOJ3597 题解 orz一眼过去一点思路都没有 既然是流量网络,就要借鉴网络流的思想了 我们先处理一下那个比值,显然是一个分数规划,我们二分一个\(\lambda = \frac{X ...
- POJ3621Sightseeing Cows[01分数规划 spfa(dfs)负环 ]
Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9703 Accepted: 3299 ...
- [P1768]天路(分数规划+SPFA判负环)
题目描述 “那是一条神奇的天路诶~,把第一个神犇送上天堂~”,XDM先生唱着这首“亲切”的歌曲,一道猥琐题目的灵感在脑中出现了. 和C_SUNSHINE大神商量后,这道猥琐的题目终于出现在本次试题上了 ...
随机推荐
- vue jquery js 获取当前时间本周的第一天 和 本月的第一天
交互的时候传输数据 后台要求这样的数据 直接上代码 这是我找度姨要的 附上链接 https://www.cnblogs.com/wasabii/p/7756560.html 它里面有本季度第一天 ...
- iOS 11 导航栏 item 偏移问题 和 Swift 下 UIButton 设置 title、image 显示问题
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- markdown最基本的几种语法
1.标题 # 相当于<h1></h1> ## 相当于<h2></h2> ### 相当于<h3></h3> #### 相当于< ...
- Python爬虫之urllib模块2
Python爬虫之urllib模块2 本文来自网友投稿 作者:PG-55,一个待毕业待就业的二流大学生. 看了一下上一节的反馈,有些同学认为这个没什么意义,也有的同学觉得太简单,关于Beautiful ...
- 新概念英语(1-129)Seventy miles an hour
Lesson 129 Seventy miles an hour 时速70英里 Listen to the tape then answer this question. What does Ann ...
- Echarts 中国地图(包括china.js文件)
用Echarts写中国地图需要导入china.js(现在官方不提供下载,个人找的在最下面有),根据需要的效果如下.位置可以自己在option里面修改 <!DOCTYPE html> < ...
- nginx和nfs
1.安装nginx #yum install epel-release -y #yum install nginx -y #vim /usr/local/nginx/conf/nginx.conf - ...
- hdu1050 Moving Tables---贪心
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1050 题目大意:就说有一些桌子需要从某些房间搬到另一些房间,但中间只有一条走廊,且走廊中任何一段只能 ...
- in成员资格符
#in成员资格符 name='小树' '小'in name# 返回True '大树'in name#返回False
- easygui控件介绍
1.msgbox: 语法:msgbox(text,title, ok_button='OK',image=None,root=None) 实例:msgbox('内容内容','标题标题','确定')返回 ...