观光奶牛Sightseeing Cows (二分+spfa(dfs))
观光奶牛
农夫约翰已决定通过带他们参观大城市来奖励他们的辛苦工作!奶牛必须决定如何最好地度过他们的空闲时间。
幸运的是,他们有一个详细的城市地图,显示L(2≤L≤1000)主要地标(方便编号为1 .. L)和P(2≤P≤5000)单向奶牛路径加入它们。农夫约翰将把奶牛带到他们选择的起始地标,从那里他们将沿着牛路走到一系列其他地标,最后回到他们的起始地标,农民约翰将把他们捡起来带回农场。因为城市中的空间非常宝贵,所以奶牛路径非常狭窄,因此沿着每个奶牛路径行进仅允许在一个固定方向上行进。
虽然奶牛可能会在城市中花费尽可能多的时间,但他们确实很容易感到厌倦。访问每个新地标很有趣,但在它们之间行走需要时间。奶牛知道每个地标i的确切有趣值Fi(1≤Fi≤1000)。
奶牛也知道奶牛的路径。Cowpath i将地标L1i连接到L2i(方向L1i - > L2i)并且需要时间Ti(1≤Ti≤1000)来遍历。
为了尽可能享受最佳休息日,奶牛希望最大限度地提高每次旅行单位时间的平均乐趣价值。当然,这些地标在他们第一次参观时才很有趣; 奶牛可能不止一次穿过地标,但他们再也没有看到它的有趣价值。此外,Farmer John正在让奶牛至少访问两个标志性建筑,以便他们在休息期间进行一些锻炼。
帮助奶牛找到每单位时间可以达到的最大乐趣值。
这道题显然你看到最大的乐趣值,就知道这道题需要二分。
二分啥呢?题目要求你求啥你就二分啥。
另外题目需要牛转一个环,很明显就是负环,因为我们要使得乐趣/时间最大,所以在预处理后我们要让他尽量的小,这就出现了负环。
因为bfs版spfa会T,所以我们应该用dfs版。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 51000
using namespace std;
bool vis[N];
int n,m,x,y,z,tot;
int c[N],num[N],head[N];
double ans,mid,l,r,w[N],dis[N];
struct Edge {
int to,dis,next;
} e[N];
int add(int x,int y,int z) {
e[++tot].to=y;
e[tot].dis=z;
e[tot].next=head[x];
head[x]=tot;
}
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;
}
bool spfa(int x) {
vis[x]=true;
for(int i=head[x]; i; i=e[i].next) {
int t=e[i].to;
if(dis[t]>dis[x]+w[i]) {
dis[t]=dis[x]+w[i];
if(vis[t]||spfa(t)) {
vis[x]=false;
return true;
}
}
}
vis[x]=false;
return false;
}
bool judge() {
for(int i=1; i<=n; i++)
if(spfa(i)) return true;
return false;
}
int main() {
n=read(),m=read();
for(int i=1; i<=n; i++) c[i]=read();
for(int i=1; i<=m; i++) {
x=read(),y=read(),z=read();
add(x,y,z);
}
l=0,r=20000;
while(r-l>0.0000001) {
mid=(l+r)/2;
for(int i=1; i<=tot; i++) {
int t=e[i].to;
w[i]=(double)mid*e[i].dis-c[t];
}
if(judge()) {
ans=mid;
l=mid;
} else r=mid;
}
printf("%.2lf",ans);
return 0;
}
观光奶牛Sightseeing Cows (二分+spfa(dfs))的更多相关文章
- [USACO07DEC]观光奶牛Sightseeing Cows 二分答案+判断负环
题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...
- 洛谷P2868 [USACO07DEC]观光奶牛Sightseeing Cows
P2868 [USACO07DEC]观光奶牛Sightseeing Cows 题目描述 Farmer John has decided to reward his cows for their har ...
- P2868 [USACO07DEC]观光奶牛Sightseeing Cows
P2868 [USACO07DEC]观光奶牛Sightseeing Cows [](https://www.cnblogs.com/images/cnblogs_com/Tony-Double-Sky ...
- 洛谷 P2868 [USACO07DEC]观光奶牛Sightseeing Cows
题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...
- 洛谷P2868 [USACO07DEC]观光奶牛 Sightseeing Cows
题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...
- Luogu 2868 [USACO07DEC]观光奶牛Sightseeing Cows
01分数规划复习. 这东西有一个名字叫做最优比率环. 首先这个答案具有单调性,我们考虑如何检验. 设$\frac{\sum_{i = 1}^{n}F_i}{\sum_{i = 1}^{n}T_i} = ...
- 洛谷P2868 [USACO07DEC]观光奶牛Sightseeing Cows(01分数规划)
题意 题目链接 Sol 复习一下01分数规划 设\(a_i\)为点权,\(b_i\)为边权,我们要最大化\(\sum \frac{a_i}{b_i}\).可以二分一个答案\(k\),我们需要检查\(\ ...
- POJ3621或洛谷2868 [USACO07DEC]观光奶牛Sightseeing Cows
一道\(0/1\)分数规划+负环 POJ原题链接 洛谷原题链接 显然是\(0/1\)分数规划问题. 二分答案,设二分值为\(mid\). 然后对二分进行判断,我们建立新图,没有点权,设当前有向边为\( ...
- 洛谷 2868 [USACO07DEC]观光奶牛Sightseeing Cows
题目戳这里 一句话题意 L个点,P条有向边,求图中最大比率环(权值(Fun)与长度(Tim)的比率最大的环). Solution 巨说这是0/1分数规划. 话说 0/1分数规划 是真的难,但貌似有一些 ...
随机推荐
- vue2.0.js
数据的渲染.数据同步 组件化.模块化 路由 ajax 数据流 Vue.js学习资源 中文官网:http://cn.vuejs.org/ 源码:http ...
- Android Fragment 初步解析
Fragment经常在我们的开发中见到,但是自我感觉对Fragment的理解还是处于初级的阶段,接下来我将用几篇文章尽量深的解析Fragment 让我们开始吧!!! Fragment的生命周期 Fra ...
- 深度讲解智能硬件手机APP开发流程
常州做APP开发公司紫竹云科技分析,智能硬件产品的软件开发,除了APP和后台之外还有一个固件端的开发,由于固件是要运行产品上的,不过此时的硬件也是刚开始进行研发,所以是无法提供硬件来运行固件的.因此在 ...
- 【Oracle】ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
出现此错误的原因是因为事务等待造成的,找出等待的事务,kill即可. 下面是我当时遇到的错误: ---删除表t1时出现错误 SCOTT@GOOD> drop table t1; drop tab ...
- vue项目中引用echarts的几种方式
准备工作: 首先我们初始化一个vue项目,执行vue init webpack echart,接着我们进入初始化的项目下.安装echarts, npm install echarts -S //或 ...
- spring cloud(一) eureka
spring cloud 注册中心 eureka 搭建过程 1.搭建eureka-server 服务端 1.1. 新建boot工程 pom引入依赖 <dependency> <gro ...
- JS 输入年份,再输入月份,弹出这个月有多少天?
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- redis 安装成功后外部服务器链接不上
1.reids服务器的6379端口telnet不通 2. 查看reids进程和端口,都是存在的.只是ip地址是127.0.0.1而不是0.0.0.0,只是本机能使用 3.查找redis的配置文件red ...
- Project Euler 15 Lattice paths
题意:在20×20方阵中从起点出发只允许向右或向下移动到达终点的路径有多少条. 思路:每次只能向右或者向下,总共 40 步,也就是 40 步中每一步都有两种选择,也就是 C (40 , 20) . 为 ...
- [NoiPlus2016]天天爱跑步
巨坑 树剖学的好啊!---sfailsth 把一段路径拆成两段,向上和S->LCA,向下LCA->T 用维护重链什么的操作搞一下. sfailsth学长真不容易啊...考场上rush了4. ...