用dfs优化的spfa判环很快啦

分数规划的题目啦

二分寻找最优值,用spfa判断能不能使 Σ(mid * t - p) > 0

最优的情况只能有一个环

因为如果有两个环,两个环都可以作为奶牛的行程,如果两个环单独计算的结果不一样,那么两个环中比值更大的才是最优解,如果结果一样,多算一个环就没有意义了。

代码如下

 #include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
const int N = ; int f[N], x, y;
double mid;
struct Edge{
int p, t;
double w;
inline void change() {
w = mid * (double)t - f[p];
}
};
vector < Edge > G[N];
bool vis[N];
double dis[N]; bool spfa(const int &z){
vis[z] = true;
for(int i = ; i < G[z].size(); i++)
if (dis[G[z][i].p] > dis[z] + G[z][i].w) {
if (vis[G[z][i].p])
return true;
else {
dis[G[z][i].p] = dis[z] + G[z][i].w;
if (spfa(G[z][i].p))
return true;
}
}
vis[z] = false;
return false;
} inline bool judge(){
for (int i = ; i <= x; i++)
for (int j = ; j < G[i].size(); j++)
G[i][j].change();
memset(vis, , sizeof(vis));
memset(dis, , sizeof(dis));
for (int i = ; i <= x; i++)
if (spfa(i))
return true;
return false;
} int main() {
scanf("%d %d", &x, &y);
for (int i = ; i <= x; i++)
scanf("%d", &f[i]);
for (int i = ; i <= y; i++) {
int m, n, o;
scanf("%d %d %d", &m, &n, &o);
G[m].push_back((Edge) {n, o, });
}
double l = , r = ;
while (r - l > 0.000001) {
mid = (l + r) / ;
if (judge()) l = mid;
else r = mid;
}
printf("%.2lf", l);
return ;
}

bzoj1690:[Usaco2007 Dec]奶牛的旅行 (分数规划 && 二分 && spfa)的更多相关文章

  1. 【bzoj1690】[Usaco2007 Dec]奶牛的旅行 分数规划+Spfa

    题目描述 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得的闲暇. 很幸运地,奶牛们找到了一张详细的城市地图,上面标 ...

  2. bzoj 1690: [Usaco2007 Dec]奶牛的旅行——分数规划+spfa判负环

    Description 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得的闲暇. 很幸运地,奶牛们找到了一张详细的城 ...

  3. BZOJ1690 Usaco2007 Dec 奶牛的旅行 【01分数规划】

    BZOJ1690 Usaco2007 Dec 奶牛的旅行 题目描述 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得 ...

  4. BZOJ1690: [Usaco2007 Dec]奶牛的旅行

    1690: [Usaco2007 Dec]奶牛的旅行 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 552  Solved: 286[Submit][St ...

  5. bzoj1690:[Usaco2007 Dec]奶牛的旅行(分数规划+spfa判负环)

    PS:此题数组名皆引用:戳我 题目大意:有n个点m条有向边的图,边上有花费,点上有收益,点可以多次经过,但是收益不叠加,边也可以多次经过,但是费用叠加.求一个环使得收益和/花费和最大,输出这个比值. ...

  6. [bzoj1690] [Usaco2007 Dec] 奶牛的旅行 (最大比率环)

    题目 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得的闲暇. 很幸运地,奶牛们找到了一张详细的城市地图,上面标注了 ...

  7. 【BZOJ】1690: [Usaco2007 Dec]奶牛的旅行(分数规划+spfa)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1690 第一题不是水题的题.. 分数规划.. T-T 百度吧..http://blog.csdn.ne ...

  8. bzoj 1690: [Usaco2007 Dec]奶牛的旅行【01分数规划+spfa】

    把add传参里的double写成int我也是石乐志-- 首先这个东西长得就很01分数规划 然后我不会证为什么没有8字环,我们假装他没有 那么设len为环长 \[ ans \leq \frac{\sum ...

  9. BZOJ 1690: [Usaco2007 Dec]奶牛的旅行

    Description 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得的闲暇. 很幸运地,奶牛们找到了一张详细的城 ...

随机推荐

  1. SEO中10个常用的查询指令

    用好搜索引擎一些特别指令,是干SEO这行的一个根本功.初步收拾了10个功能,独自使用是最基础的才能,假如综合应用,你会发现搜索的奇妙无限. 1. site: 某个特定网站收录情况 site:www.c ...

  2. redis 4.x及以上的未授权访问

    00x01 环境搭建 选择在kali中复现 选择了redis5.0.5版本 1.下载并安装: $ wget http://download.redis.io/releases/redis-5.0.5. ...

  3. 数据库异常:SQL Error: 0, SQLState: S0022

    问题描述 在本地搭建 mysql + MyEclipse + tomcat,系统跑起来之后,调用自己写的查询接口,报错“SQL Error: 0, SQLState: S0022” 具体报错:  -  ...

  4. c++ md5算法实现(转)

    原文链接:C++计算文件的MD5值 其他:c++输入文件流ifstream用法详解

  5. Office办公软件Excel使用整理

    Office办公软件Excel使用整理 Excel默认打印预览于当前连接的打印机的纸张大小保持一致. Excel sheet不见了怎么办 -------------- 设置Excel第二页打印开始的位 ...

  6. Pikachu-File Inclusion(文件包含漏洞)

    File Inclusion(文件包含漏洞)概述 文件包含,是一个功能.在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件. 比如 在PHP中 ...

  7. 51nod(1174 区间中最大的数)(ST表模板题)

    1174 区间中最大的数 1.0 秒 131,072.0 KB 0 分 基础题   给出一个有N个数的序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有数中,最大的数是多少. 例如: 1 ...

  8. element-ui的upload组件的clearFiles方法

    <template> <div> <el-button @click="clearFiles">重新上传</el-button> & ...

  9. 19新生赛 谁更nb

    题目描述: 有一堆石子共有N个.syx xxh两个人轮流拿,syx先拿.每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获 胜.syx xxh都非常聪明,拿石子的过程中不会出现失误.给出N和K,问最后 ...

  10. 【Python】1.PyQT5界面初尝试

    1->通过pycharm打开QTdesigner.创建新Form. 2->选择Widget创建 3->不添加任何控件 点击保存 pycharm列表如下 后缀名位ui的  即QTdes ...