观光奶牛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分数规划 是真的难,但貌似有一些 ... 
随机推荐
- 读书笔记7-浪潮之巅(part2)
			浪潮之巅 ——成功的公司各有各的绝招,而失败的公司倒有不少的共同之处 奔腾的芯(Intel) 前身:在处理器性能还很平庸的年代,站在科技前沿的计算机公司都是集中在工作站级处理器领域的,而同IBM.DE ... 
- (转)基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍
			http://www.cnblogs.com/wuhuacong/p/3281103.html 最近花了很多时间在重构和进一步提炼Winform开发框架的工作上,加上时不时有一些项目的开发工作,我博客 ... 
- Github 团队协作基本流程与命令操作 图解git工作流程
			# 先 fork 项目到自己 github # 1. 从自己仓库克隆到本地(clone 的是项目指定的默认分支,比如 master) git clone git@github.com:me/em.gi ... 
- 认识图片放大工具PhotoZoom的菜单栏
			使用PhotoZoom能够对数码图片无损放大,备受设计师和业内人员的青睐,它的出现时一场技术的革新,新颖的技术,简单的界面,优化的算法,使得它可以对图片进行放大而没有锯齿,不会失真.本文为您一起来认识 ... 
- 10件5G能实现,但4G不能做的事情
			10件5G能实现,但4G不能做的事情 从三星Galaxy S10 5G手机到OnePlus 7 Pro 5G手机以及更高版本,首批5G手机现已上市.5G网络时代的开启是从小范围内,如果你居住在可以使用 ... 
- VS Code中编写html(4) 标签的宽高颜色背景设置
			1 <!+Tab键--> <!--有两个div标签时,分别设置style,有两种方法--> <div id="div1">第一个div标签:& ... 
- JS 实现1!+2!+3!+4!+5!+....+n!
			<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ... 
- day28 re(正则)模块
			目录 re模块有什么用? re模块的基础使用 元字符 终极 贪婪模式 非贪婪模式 re模块高级 comple match和search re.split() sub和subn 分组 re模块有什么用? ... 
- 关闭浏览器 清除session
			捕获关闭浏览器的事件 关于关闭IE清空session的总结 Session过期会清楚session 还可以手动清除session实现关闭浏览器时清除session的方法 
- qqbot 出现请求接口失败的问题
			解决方法: 找到python安装目录下“Lib\site-packages\qqbot\qcontactdb\fetch.py”文件下的“http://s.web2.qq.com” 替换成 “http ... 
