01分数规划的基本裸题。

因为路线一定是个环,所以找个最优比率生成环即可

二分一个比值,check一下即可。

#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=1005;
int l,p,a[1005],inq[1005],cnt[1005],head[1005],ecnt;
struct Edge{int to,nxt,val;}e[N<<3];
void add(int bg,int ed,int val){e[++ecnt].nxt=head[bg];e[ecnt].to=ed;e[ecnt].val=val;head[bg]=ecnt;}
double dis[1005];
bool ck(double x){
queue<int>q;
for(int i=1;i<=l;i++) q.push(i),dis[i]=0,inq[i]=1,cnt[i]=1;
while(!q.empty()){
int u=q.front();q.pop();inq[u]=0;
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].to;double dist=e[i].val;
if(dis[v]>(double)dis[u]+x*dist-(double)a[u]){
dis[v]=dis[u]+x*dist-(double)a[u];
if(!inq[v]) q.push(v),inq[v]=1,cnt[v]++;
if(cnt[v]>=l)return 1;
}
}
}return 0;
}
int main() {
scanf("%d%d",&l,&p);
for(int i=1;i<=l;i++) scanf("%d",&a[i]);
for(int u,v,b,i=1;i<=p;i++)
scanf("%d%d%d",&u,&v,&b),add(u,v,b);
double l=0,r=10000000,mid;
while(r-l>1e-4){
mid=(l+r)/2;
if(ck(mid)) l=mid;
else r=mid;
}
printf("%.2lf",l);
}

最新文章

  1. NIO概述
  2. JavaScript闭包(一)——实现
  3. Android中插件开发篇之----动态加载Activity(免安装运行程序)
  4. FOJProblem 2214 Knapsack problem(01背包+变性思维)
  5. 银联接口(注意项&amp;备忘)
  6. weblogic目录结构
  7. StringToInt
  8. Facebook 开源安卓版 React Native,开发者可将相同代码用于网页和 iOS 应用开发
  9. 学习之路十四:客户端调用WCF服务的几种方法小议
  10. BZOJ3391: [Usaco2004 Dec]Tree Cutting网络破坏
  11. C++指针数组和数组指针
  12. rpm方式安装MySQL-5.6
  13. 阿里安卓面试分析: Android应用的闪退(crash)问题跟踪和解析
  14. python concurrent.futures
  15. 【java】解析java类加载与反射机制
  16. Flutter,最好的跨平台开发框架
  17. python之字典【dict】
  18. vue 项目项目启动时由于EsLint代码校验报错
  19. 安卓代码混淆(Android Studio)
  20. coredns 代理consul 运行noamd 部署的应用

热门文章

  1. spring boot使用外部tomcat部署
  2. [Javascript Crocks] Safely Access Nested Object Properties with `propPath`
  3. eclipse怎样开启/关闭代码提示功能
  4. 0x58B 四边形不等式
  5. Find a way--hdoj
  6. poj1028--动态规划--Ignatius and the Princess III
  7. Node.js:JXcore
  8. Hdu-5983 2016ACM/ICPC亚洲区青岛站 B.Pocket Cube 模拟
  9. java基本数据类型(二)和分支结构
  10. POJ 2513 trie树+并查集判断无向图的欧拉路