bzoj1690
二分+分数规划+dfs判环
跟1486很像,但是我忘记怎么判环了,
我们可以写一个dfs,如果当前节点的距离小于更新的距离,而且这个点已经在当前访问过了,那么就是有环了,如果没有访问过就继续dfs,每个点枚举dfs就行了。
如果这个点距离大于更新距离,那么没必要访问,因为刚才都没有判出来正环,现在这个距离更小,走原先的路更不可能出现正环了
其实想了想,主要是可能有多个连通块,因为如果一个连通块有环,那么在连通块的任何一个点都能查到环,所以主要是不同的连通块导致的,dfs判环只要一次就行了,不像spfa要n次才行
#include<bits/stdc++.h>
using namespace std;
const int N = ;
struct ed {
int to;
double w;
ed(int to = , double w = ) : to(to), w(w) {}
};
struct Edge {
int u, v;
double t;
Edge(int u = , int v = , double t = ) : u(u), v(v), t(t) {}
} edge[N * ];
int n, m;
int cnt[N], q[N * ], vis[N];
double d[N], f[N];
vector<ed> G[N];
bool dfs(int u)
{
vis[u] = ;
for(int i = ; i < G[u].size(); ++i)
{
ed e = G[u][i];
if(d[e.to] < d[u] + e.w)
{
if(vis[e.to]) return true;
d[e.to] = d[u] + e.w;
if(dfs(e.to)) return true;
}
}
vis[u] = ;
return false;
}
bool check(double mid)
{
for(int i = ; i <= n; ++i)
{
d[i] = -1e9;
vis[i] = ;
G[i].clear();
}
for(int i = ; i <= m; ++i) G[edge[i].u].push_back(ed(edge[i].v, f[edge[i].u] - mid * edge[i].t));
for(int i = ; i <= n; ++i) if(dfs(i)) return true;
return false;
}
int main()
{
scanf("%d%d", &n, &m);
for(int i = ; i <= n; ++i) scanf("%lf", &f[i]);
for(int i = ; i <= m; ++i) scanf("%d%d%lf", &edge[i].u, &edge[i].v, &edge[i].t);
double l = , r = , ans;
while(r - l > 1e-)
{
double mid = (l + r) / 2.0;
if(check(mid)) l = ans = mid;
else r = mid;
}
printf("%.2f\n", ans);
return ;
}
bzoj1690的更多相关文章
- BZOJ1690 Usaco2007 Dec 奶牛的旅行 【01分数规划】
BZOJ1690 Usaco2007 Dec 奶牛的旅行 题目描述 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得 ...
- BZOJ1690: [Usaco2007 Dec]奶牛的旅行
1690: [Usaco2007 Dec]奶牛的旅行 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 552 Solved: 286[Submit][St ...
- bzoj1690:[Usaco2007 Dec]奶牛的旅行(分数规划+spfa判负环)
PS:此题数组名皆引用:戳我 题目大意:有n个点m条有向边的图,边上有花费,点上有收益,点可以多次经过,但是收益不叠加,边也可以多次经过,但是费用叠加.求一个环使得收益和/花费和最大,输出这个比值. ...
- 【bzoj1690】[Usaco2007 Dec]奶牛的旅行 分数规划+Spfa
题目描述 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得的闲暇. 很幸运地,奶牛们找到了一张详细的城市地图,上面标 ...
- bzoj1690:[Usaco2007 Dec]奶牛的旅行 (分数规划 && 二分 && spfa)
用dfs优化的spfa判环很快啦 分数规划的题目啦 二分寻找最优值,用spfa判断能不能使 Σ(mid * t - p) > 0 最优的情况只能有一个环 因为如果有两个环,两个环都可以作为奶牛的 ...
- [bzoj1690] [Usaco2007 Dec] 奶牛的旅行 (最大比率环)
题目 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得的闲暇. 很幸运地,奶牛们找到了一张详细的城市地图,上面标注了 ...
- 8.11-8.16:usaco
summary:57 bzoj1741:裸二分图最大匹配 #include<cstdio> #include<cstring> #include<iostream> ...
- 由zImage生成uImage
一.手动使用mkimage命令 mkimage -A arm -O linux -T kernel -C none -a 30007fc0 -e 30007fc0 -n uImage -d /wo ...
- NOIP前刷水行动
2016.11.15 BZOJ1009:DP+矩阵乘法+KMP BZOJ1898:矩阵乘法 BZOJ4101:贪心,考虑我们往右边撞的时候,我们会向左边冲 ,于是枚举答案点利用一个指针计算即可! 20 ...
随机推荐
- 16监听器、Filter、Nginx、Spring、AOP
16监听器.Filter.Nginx.Spring.AOP-2018/07/30 1.监听器 监听web对象创建与销毁的监听器 ServletContextListener HttpSessionLi ...
- 【ssm】spring功能讲解
概览 Spring5框架包含许多特性,负责管理项目中的所有对象,并被很好地组织在下图所示的模块中 核心容器:由spring-beans.spring-core.spring-context.sprin ...
- with一个对象,自动触发__enter__方法
class Foo(object): def __init__(self): pass def __enter__(self): print("__enter__") def __ ...
- centOS目录结构介绍
Linux / CentOS目录结构 /: 根目录,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib./sbin应该和根目录放置在一个分区中 /bin:/usr/bin: ...
- APUE 文件IO
文件 IO 记录书中的重要知识和思考实践部分 Unix 每个文件都对应一个文件描述符(file descriptor),为一个非负整数,一个文件可以有多个fd, 后面所有与文件(设备,套接字等)有关操 ...
- apache 添加虚拟机
<VirtualHost *:80> DocumentRoot "E:/UPUPW_AP7.0/htdocs/xd.local/public" ServerName a ...
- LINUX-光盘
cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force 清空一个可复写的光盘内容 mkisofs /dev/cdrom > ...
- 洛谷 1097 统计数字(NOIp2007提高组T1)
[题解] 排个序然后扫一遍进行统计即可. #include<cstdio> #include<algorithm> #include<cstring> #defin ...
- AOP基础
[Why AOP ?] 1.代码混乱:越来越多的非业务需求(日志和验证等)加入后,原有的业务方法急剧膨胀.每个方法在处理核心逻辑的同时还必须兼顾其他多个关注点. 2.代码分散:以日志需求为例,知识为了 ...
- RCC 2014 Warmup (Div. 2) 蛋疼解题总结
A. Elimination time limit per test 1 second memory limit per test 256 megabytes input standard input ...