bzoj3597 [Scoi2014]方伯伯运椰子
2017-10-24 22:34
381 查看
Description
Input
第一行包含二个整数N,M接下来M行代表M条边,表示这个交通网络
每行六个整数,表示Ui,Vi,Ai,Bi,Ci,Di
接下来一行包含一条边,表示连接起点的边
Output
一个浮点数,保留二位小数。表示答案,数据保证答案大于0Sample Input
5 101 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
103.00HINT
1<=N<=50000<=M<=3000
1<=Ui,Vi<=N+2
0<=Ai,Bi<=500
0<=Ci<=10000
0<=Di<=1000
正解:分数规划+$spfa$。
网上有一个什么鬼消圈定理,就是说如果要调整一定是调整一个环,而且不可能扩容,如果扩容肯定$ans<0$了。
然后我们看到那个式子,可以感觉到这是一个显然的分数规划,化简可得$y-x+k*ans<0$,那么答案就会更优。
$y-x$实际上就是调整所需要的费用,那么我们可以发现,如果扩容,费用就是$b+d$,压缩费用就是$a-d$。
于是每次二分时边权就是$b+d+mid$,而如果$c>0$,则连一条$a-d+mid$反向边,然后我们只要判断是否有负权环就行了。
#include <bits/stdc++.h> #define il inline #define RG register #define ll long long #define eps (1e-4) #define inf (1e9) #define N (5010) using namespace std; struct edge{ int nt,to,dis; }g[10010]; int head ,vis ,n,m,num; double dis ; il int gi(){ RG int x=0,q=1; RG char ch=getchar(); while ((ch<'0' || ch>'9') && ch!='-') ch=getchar(); if (ch=='-') q=-1,ch=getchar(); while (ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar(); return q*x; } il void insert(RG int from,RG int to,RG int dis){ g[++num]=(edge){head[from],to,dis},head[from]=num; return; } il int spfa(RG int x,RG double key){ vis[x]=1; RG int v; for (RG int i=head[x];i;i=g[i].nt){ v=g[i].to; if (dis[v]>dis[x]+g[i].dis+key){ dis[v]=dis[x]+g[i].dis+key; if (vis[v] || spfa(v,key)) return 1; } } vis[x]=0; return 0; } il int check(RG double key){ for (RG int i=1;i<=n;++i) vis[i]=dis[i]=0; for (RG int i=1;i<=n;++i) if (spfa(i,key)) return 1; return 0; } int main(){ #ifndef ONLINE_JUDGE freopen("coconut.in","r",stdin); freopen("coconut.out","w",stdout); #endif n=gi(),m=gi(),n+=2; for (RG int i=1,u,v,a,b,c,d;i<=m;++i){ u=gi(),v=gi(),a=gi(),b=gi(),c=gi(),d=gi(); insert(u,v,b+d); if (c) insert(v,u,a-d); } RG double l=0,r=inf,mid,ans=0; while (r-l>eps) mid=(l+r)/2,check(mid)?(ans=mid,l=mid):r=mid; printf("%0.2lf\n",ans); return 0; }
相关文章推荐
- bzoj3597 [Scoi2014]方伯伯运椰子 01分数规划
- [BZOJ3597][SCOI2014][网络流][分数规划]方伯伯运椰子[好题]
- bzoj3597[Scoi2014]方伯伯运椰子 01分数规划+spfa判负环
- [bzoj3597][SCOI2014]方伯伯运椰子
- BZOJ3597 [Scoi2014]方伯伯运椰子 【二分 + 判负环】
- bzoj3597: [Scoi2014]方伯伯运椰子 消圈算法 分数规划
- bzoj3597 [Scoi2014]方伯伯运椰子
- BZOJ3597: [Scoi2014]方伯伯运椰子
- [bzoj3597][scoi2014]方伯伯运椰子——分数规划,负环
- bzoj 3597: [Scoi2014]方伯伯运椰子 spfa判负环+分数规划
- 3597: [Scoi2014]方伯伯运椰子[分数规划]
- bzoj 3597: [Scoi2014]方伯伯运椰子
- 3597: [Scoi2014]方伯伯运椰子
- bzoj 3597: [Scoi2014]方伯伯运椰子 (01分数规划+spfa)
- bzoj 3597: [Scoi2014]方伯伯运椰子 [01分数规划 消圈定理 spfa负环]
- 洛谷 P3288 [SCOI2014]方伯伯运椰子
- [BZOJ]3597: [Scoi2014]方伯伯运椰子 01分数规划+spfa
- 省选专练[SCOI2014]方伯伯运椰子
- [SCOI2014]方伯伯运椰子
- bzoj 3597: [Scoi2014]方伯伯运椰子