bzoj 1690: [Usaco2007 Dec]奶牛的旅行【01分数规划+spfa】
2018-05-02 19:52
267 查看
把add传参里的double写成int我也是石乐志……
首先这个东西长得就很01分数规划
然后我不会证为什么没有8字环,我们假装他没有
那么设len为环长
\[
ans \leq \frac{\sum_{i=1}^{len}f_i}{\sum_{i=1}^{len}t_i}
\]
\[
ans*\sum_{i=1}^{len}t_i \leq \sum_{i=1}^{len}f_i
\]
\[
\sum_{i=1}^{len}ans*t_i-f_i \leq 0
\]
二分这个ans,把每条边的边权赋值成\( ans*t_i-f_i \)fi是i这条边的起点点权或者终点点权都可以
然后用dfs版的spfa找正环来判断当前ans的可行性
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; const int N=1005,M=5005; const double eps=1e-5; int n,m,h ,cnt,x[M],y[M]; double a ,z[M],dis ; bool f,v ; struct qwe { int ne,to; double va; }e[M]; int read() { int r=0,f=1; char p=getchar(); while(p>'9'||p<'0') { if(p=='-') f=-1; p=getchar(); } while(p>='0'&&p<='9') { r=r*10+p-48; p=getchar(); } return r*f; } void add(int u,int v,double w) { cnt++; e[cnt].ne=h[u]; e[cnt].to=v; e[cnt].va=w; h[u]=cnt; } void spfa(int u) { if(f) return; v[u]=1; for(int i=h[u];i&&!f;i=e[i].ne) if(dis[e[i].to]<dis[u]+e[i].va) { dis[e[i].to]=dis[u]+e[i].va; if(v[e[i].to]) { f=1; return; } else spfa(e[i].to); } v[u]=0; } bool ok(double mid) { cnt=0;f=0; memset(h,0,sizeof(h)); memset(v,0,sizeof(v)); memset(dis,0,sizeof(dis)); for(int i=1;i<=m;i++) add(x[i],y[i],a[x[i]]-mid*z[i]); for(int i=1;i<=n;i++) { spfa(i); if(f) return 1; } return 0; } int main() { n=read(),m=read(); for(int i=1;i<=n;i++) a[i]=read(); for(int i=1;i<=m;i++) x[i]=read(),y[i]=read(),z[i]=read(); double l=0,r=1e6,ans=0; while(r-l>eps) { double mid=(l+r)/2.0; if(ok(mid)) l=mid,ans=mid; else r=mid; } printf("%.2lf\n",ans); return 0; }
相关文章推荐
- bzoj1690[Usaco2007 Dec]奶牛的旅行 01分数规划+spfa(最优比率环)
- [Usaco2007 Dec][BZOJ1690] 奶牛的旅行|分数规划|二分|SPFA
- 【BZOJ】1690: [Usaco2007 Dec]奶牛的旅行(分数规划+spfa)
- bzoj1690:[Usaco2007 Dec]奶牛的旅行(分数规划+spfa判负环)
- bzoj 1690: [Usaco2007 Dec]奶牛的旅行(01分数规划--最优比率环)
- 【BZOJ1690】【Usaco2007 Dec】奶牛的旅行 分数规划 判断负环
- bzoj 1690: [Usaco2007 Dec]奶牛的旅行——分数规划+spfa判负环
- 【bzoj1690】【Usaco2007 Dec】【奶牛的旅行】【分数规划】
- bzoj1690 [Usaco2007 Dec]奶牛的旅行(最优比率环,二分答案+spfa判负环)
- bzoj 1690: [Usaco2007 Dec]奶牛的旅行 spfa+二分答案
- 【BZOJ】1690: [Usaco2007 Dec]奶牛的旅行
- 【bzoj1690】[Usaco2007 Dec]奶牛的旅行
- bzoj1690 [Usaco2007 Dec]奶牛的旅行
- bzoj1690 [Usaco2007 Dec]奶牛的旅行
- 【bzoj1690】[Usaco2007 Dec]奶牛的旅行 分数规划+Spfa
- BZOJ 1690: [Usaco2007 Dec]奶牛的旅行
- bzoj 1690: [Usaco2007 Dec]奶牛的旅行
- 【BZOJ 1690】 [Usaco2007 Dec]奶牛的旅行
- 【bzoj1690/Usaco2007 Dec】奶牛的旅行——分数规划 最优比率环
- BZOJ1690 [Usaco2007 Dec]奶牛的旅行