bzoj1690 [Usaco2007 Dec]奶牛的旅行(最优比率环,二分答案+spfa判负环)
2017-09-30 12:57
495 查看
做了最优比率生成树,这道题意思差不多,也是二分答案,用spfa判负环即可。
#include <bits/stdc++.h> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define N 1010 #define M 5010 #define eps 1e-5 inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } int n,m,a ,h ; double d ; bool vis ; struct edge{ int to,next,w; }data[M]; inline bool spfa(int x,double mid){//判负环 vis[x]=1; for(int i=h[x];i;i=data[i].next){ int y=data[i].to;double 1178c val=data[i].w*mid-a[y]; if(d[x]+val<d[y]){ d[y]=d[x]+val; if(vis[y]||spfa(y,mid)){vis[x]=0;return 1;} } } vis[x]=0;return 0; } inline bool jud(double x){ memset(d,0,sizeof(d)); for(int i=1;i<=n;++i){ if(spfa(i,x)) return 1; } return 0; } int main(){ // freopen("testdata.in","r",stdin); n=read();m=read(); for(int i=1;i<=n;++i) a[i]=read(); for(int i=1;i<=m;++i){ int x=read(),y=read(),w=read(); data[i].to=y;data[i].next=h[x];h[x]=i;data[i].w=w; } double l=0.0,r=1000.0; while(r-l>=eps){ double mid=(l+r)/2; if(jud(mid)) l=mid; else r=mid; } printf("%.2f\n",l); return 0; }
相关文章推荐
- bzoj1690[Usaco2007 Dec]奶牛的旅行 01分数规划+spfa(最优比率环)
- bzoj 1690: [Usaco2007 Dec]奶牛的旅行(01分数规划--最优比率环)
- [Usaco2007 Dec][BZOJ1690] 奶牛的旅行|分数规划|二分|SPFA
- bzoj1690:[Usaco2007 Dec]奶牛的旅行(分数规划+spfa判负环)
- 【BZOJ1690】【Usaco2007 Dec】奶牛的旅行 分数规划 判断负环
- bzoj 1690: [Usaco2007 Dec]奶牛的旅行 spfa+二分答案
- bzoj 1690: [Usaco2007 Dec]奶牛的旅行【01分数规划+spfa】
- 【BZOJ】1690: [Usaco2007 Dec]奶牛的旅行(分数规划+spfa)
- bzoj1690 [Usaco2007 Dec]奶牛的旅行
- 【bzoj1690/Usaco2007 Dec】奶牛的旅行——分数规划 最优比率环
- 【bzoj1690】【Usaco2007 Dec】【奶牛的旅行】【分数规划】
- 【BZOJ】1690: [Usaco2007 Dec]奶牛的旅行
- BZOJ1690 [Usaco2007 Dec]奶牛的旅行
- 【bzoj1690】[Usaco2007 Dec]奶牛的旅行 分数规划+Spfa
- bzoj 1690: [Usaco2007 Dec]奶牛的旅行
- 【BZOJ 1690】 [Usaco2007 Dec]奶牛的旅行
- 【bzoj1690】[Usaco2007 Dec]奶牛的旅行
- bzoj 1690: [Usaco2007 Dec]奶牛的旅行——分数规划+spfa判负环
- BZOJ 1690: [Usaco2007 Dec]奶牛的旅行
- bzoj1690 [Usaco2007 Dec]奶牛的旅行