Luogu 2868 [USACO07DEC]观光奶牛Sightseeing Cows
01分数规划复习。
这东西有一个名字叫做最优比率环。
首先这个答案具有单调性,我们考虑如何检验。
设$\frac{\sum_{i = 1}^{n}F_i}{\sum_{i = 1}^{n}T_i} = e$,我们需要检验的就是$\sum_{i = 1}^{n}(F_i - mid * T_i) \geq 0$是否存在。
感觉这玩意不好算,再变形一下:$\sum_{i = 1}^{n}(e * T_i - F_i) < 0$,就变成一个负环的检验了。
$F_i$应当可以任取一条有向边的入点和出点。
注意二分时的边界问题。
时间复杂度$O(logn (spfa???))$。
Code:
#include <cstdio>
#include <cstring>
using namespace std;
typedef long double db; const int N = ;
const int M = ;
const db inf = 1e10;
const db eps = 1e-; int n, m, tot = , head[N];
db dis[N], a[N];
bool vis[N], ex; struct Edge {
int to, nxt;
db val;
} e[M]; inline void add(int from, int to, db val) {
e[++tot].to = to;
e[tot].val = val;
e[tot].nxt = head[from];
head[from] = tot;
} template <typename T>
inline void chkMax(T &x, T y) {
if(y > x) x = y;
} template <typename T>
inline void chkMin(T &x, T y) {
if(y < x) x = y;
} void dfs(int x, db mid) {
if(ex) return;
vis[x] = ;
for(int i = head[x]; i; i = e[i].nxt) {
int y = e[i].to;
if(dis[y] > dis[x] + mid * e[i].val - a[y]) {
dis[y] = dis[x] + mid * e[i].val - a[y];
if(vis[y]) {
ex = ;
return;
}
dfs(y, mid);
}
}
vis[x] = ;
} inline bool chk(db mid) {
for(int i = ; i <= n; i++) {
dis[i] = 0.0;
vis[i] = ;
}
ex = ; for(int i = ; i <= n; i++) {
dfs(i, mid);
if(ex) break;
} return ex;
} int main() {
scanf("%d%d", &n, &m);
db ln = 0.0, rn = 0.0, mid, res;
for(int i = ; i <= n; i++) scanf("%Lf", &a[i]);
for(int i = ; i <= m; i++) {
int x, y; db v;
scanf("%d%d%Lf", &x, &y, &v);
add(x, y, v);
rn += v;
} for(; ln + eps <= rn; ) {
mid = (ln + rn) * 0.5;
if(chk(mid)) ln = mid, res = mid;
else rn = mid;
} printf("%.2Lf\n", res);
return ;
}
Luogu 2868 [USACO07DEC]观光奶牛Sightseeing Cows的更多相关文章
- POJ3621或洛谷2868 [USACO07DEC]观光奶牛Sightseeing Cows
一道\(0/1\)分数规划+负环 POJ原题链接 洛谷原题链接 显然是\(0/1\)分数规划问题. 二分答案,设二分值为\(mid\). 然后对二分进行判断,我们建立新图,没有点权,设当前有向边为\( ...
- 洛谷 2868 [USACO07DEC]观光奶牛Sightseeing Cows
题目戳这里 一句话题意 L个点,P条有向边,求图中最大比率环(权值(Fun)与长度(Tim)的比率最大的环). Solution 巨说这是0/1分数规划. 话说 0/1分数规划 是真的难,但貌似有一些 ...
- P2868 [USACO07DEC]观光奶牛Sightseeing Cows
P2868 [USACO07DEC]观光奶牛Sightseeing Cows [](https://www.cnblogs.com/images/cnblogs_com/Tony-Double-Sky ...
- 洛谷P2868 [USACO07DEC]观光奶牛Sightseeing Cows
P2868 [USACO07DEC]观光奶牛Sightseeing Cows 题目描述 Farmer John has decided to reward his cows for their har ...
- 洛谷P2868 [USACO07DEC]观光奶牛 Sightseeing Cows
题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...
- [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 ...
- 洛谷P2868 [USACO07DEC]观光奶牛Sightseeing Cows(01分数规划)
题意 题目链接 Sol 复习一下01分数规划 设\(a_i\)为点权,\(b_i\)为边权,我们要最大化\(\sum \frac{a_i}{b_i}\).可以二分一个答案\(k\),我们需要检查\(\ ...
- 洛谷 P2868 [USACO07DEC]观光奶牛Sightseeing Cows 题解
题面 这道题是一道标准的01分数规划: 但是有一些细节可以优化: 不难想到要二分一个mid然后判定图上是否存在一个环S,该环是否满足∑i=1t(Fun[vi]−mid∗Tim[ei])>0 但是 ...
随机推荐
- .NET面试题总结
1.c#垃圾回收机制 从以下方面入手展开: 1.压缩合并算法 2.代的机制 3.GC调用终结器 2.委托和事件 先说它的定义:委托的本质是类,类型安全的指针,然后从用途上考虑,事件是包装的委托 ...
- iPhone图片拉伸:resizableImageWithCapInsets
1 [[UIImage imageNamed:@"button_textured_30"] resizableImageWithCapInsets:UIEdgeInsetsMake ...
- Mybatis与Hibernate的详细对比
前言 这篇博文我们重点分析一下Mybatis与hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理. Mybatis [持久化框架]Mybatis简 ...
- Java基础总结大全
一.基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平台,jvm不是跨平台的. J ...
- 洛谷3004 [USACO10DEC]宝箱Treasure Chest
题目:https://www.luogu.org/problemnew/show/P3004 一眼看上去就是记忆化搜索的dp.像 一双木棋 一样. 结果忘了记忆化.T了5个点. 然后加上记忆化.MLE ...
- C语言通过地址传递参数
// 正确 #include <stdio.h> struct para { int a; int b; }; struct para test = { .a = , .b = , }; ...
- 升级3.4成3.6 ubuntu14.04 和miniconda虚拟环境
打开Anaconda Prompt窗口conda update conda 先升级conda激活要升级python的虚拟环境conda install python=3.6.6 再升级pythonco ...
- 在Linux 64位系统下使用hugepage
首先,为什么要介绍/使用HugePage? 在步入正题之前,先讲一个非常普遍的数据库性能问题. 众所周知,Oracle数据库使用共享内存(SGA)来管理可以共享的一些资源;比如shared pool中 ...
- java多线程练习实例
总结: 循环的使用率蛮高,Thraed.sleep(),try-catch语句 package com.aa; public class West { public static void main( ...
- java图形用户界面添加背景颜色不成功的解决方案
总结:背景颜色不成功,那么使用这个方法试试.getContentpane(); package clientFrame; import java.awt.Color; import java.awt. ...