[POJ 3621] Sighting Cows
2024-08-31 06:43:17
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);
}
最新文章
- NIO概述
- JavaScript闭包(一)——实现
- Android中插件开发篇之----动态加载Activity(免安装运行程序)
- FOJProblem 2214 Knapsack problem(01背包+变性思维)
- 银联接口(注意项&;备忘)
- weblogic目录结构
- StringToInt
- Facebook 开源安卓版 React Native,开发者可将相同代码用于网页和 iOS 应用开发
- 学习之路十四:客户端调用WCF服务的几种方法小议
- BZOJ3391: [Usaco2004 Dec]Tree Cutting网络破坏
- C++指针数组和数组指针
- rpm方式安装MySQL-5.6
- 阿里安卓面试分析: Android应用的闪退(crash)问题跟踪和解析
- python concurrent.futures
- 【java】解析java类加载与反射机制
- Flutter,最好的跨平台开发框架
- python之字典【dict】
- vue 项目项目启动时由于EsLint代码校验报错
- 安卓代码混淆(Android Studio)
- coredns 代理consul 运行noamd 部署的应用
热门文章
- spring boot使用外部tomcat部署
- [Javascript Crocks] Safely Access Nested Object Properties with `propPath`
- eclipse怎样开启/关闭代码提示功能
- 0x58B 四边形不等式
- Find a way--hdoj
- poj1028--动态规划--Ignatius and the Princess III
- Node.js:JXcore
- Hdu-5983 2016ACM/ICPC亚洲区青岛站 B.Pocket Cube 模拟
- java基本数据类型(二)和分支结构
- POJ 2513 trie树+并查集判断无向图的欧拉路