博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3597 SCOI2014方伯伯运椰子(分数规划+spfa)
阅读量:5240 次
发布时间:2019-06-14

本文共 1865 字,大约阅读时间需要 6 分钟。

  即在总流量不变的情况下调整每条边的流量。显然先二分答案变为求最小费用。容易想到直接流量清空跑费用流,但复杂度略有些高。

  首先需要知道(不知道也行?)一种平时基本不用的求最小费用流的算法——消圈法。算法基于下面的定理:如果残量网络中有负环,当前费用流一定不是最小费用流(似乎很显然?)。注意到分数规划之后,我们需要知道的只是在调整边权后的网络里,最小费用流是否可能比原来更优,于是构造出残量网络,spfa判负环即可。

#include
#include
#include
#include
#include
#include
using namespace std;#define ll long long#define N 5010#define M 3010char getc(){ char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}int gcd(int n,int m){ return m==0?n:gcd(m,n%m);}int read(){ int x=0,f=1;char c=getchar(); while (c<'0'||c>'9') { if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x*f;}const double eps=1E-4;int n,m,p[N],t,q[N],cnt[N];double dis[N];bool flag[N];struct data{ int to,nxt;double len;}edge[M<<1]; void addedge(int x,int y,double z){t++;edge[t].to=y,edge[t].nxt=p[x],edge[t].len=z,p[x]=t;}int inc(int &x){x++;if (x>n+1) x-=n+1;return x;}bool spfa(){ memset(flag,0,sizeof(flag)); memset(cnt,0,sizeof(cnt)); int head=0,tail=1;q[1]=n-1; for (int i=1;i<=n;i++) dis[i]=100000000;dis[n-1]=0; do { int x=q[inc(head)];flag[x]=0; for (int i=p[x];i;i=edge[i].nxt) if (dis[x]+edge[i].len
=n) return 1; } } }while (head!=tail); return 0;}bool check(double k){ for (int i=1;i<=t;i++) edge[i].len+=k; bool ans=spfa(); for (int i=1;i<=t;i++) edge[i].len-=k; return ans; }int main(){#ifndef ONLINE_JUDGE freopen("bzoj3597.in","r",stdin); freopen("bzoj3597.out","w",stdout); const char LL[]="%I64d\n";#else const char LL[]="%lld\n";#endif n=read()+2,m=read(); for (int i=1;i<=m;i++) { int x=read(),y=read(),a=read(),b=read(),c=read(),d=read(); addedge(x,y,b+d); if (c>0) addedge(y,x,a-d); } double l=eps,r=10000,ans; while (l+eps

 

转载于:https://www.cnblogs.com/Gloid/p/10287802.html

你可能感兴趣的文章
HDU 4553 约会安排
查看>>
使用其他模型分页$data = $this->paginate('MerchantProductOrder');
查看>>
BZOJ3456城市规划
查看>>
Oracle联机日志损坏解决办法
查看>>
python自学开始
查看>>
tomcat 查看和修改内存
查看>>
iOS:制作一个简易的计算器
查看>>
正则表达式
查看>>
23种设计模式(5):原型模式
查看>>
遐想关于机器人革命
查看>>
duobango-tinySAK,20121214
查看>>
查看语句运行时间异常的原因(SQLServer)
查看>>
第七章:事件和动画
查看>>
洛谷P1272 重建道路
查看>>
CTime格式化
查看>>
Guava学习笔记-BiMap
查看>>
eclipse好用的快捷键
查看>>
BZOJ 2434: [Noi2011]阿狸的打字机( AC自动机 + DFS序 + 树状数组 )
查看>>
BZOJ 2005: [Noi2010]能量采集( 数论 + 容斥原理 )
查看>>
如何确定 原型与实例之间的关系
查看>>