题目链接

一开始不理解为什么不能直接用\(Tarjan\)跑出换直接求出最小值,然后想到了“简单环”,恍然大悟。

二分答案,把所有边都减去\(mid\),判是否存在负环,存在就\(r=mid\)。

别的题都卡dfs,这题卡bfs

#include <cstdio>
#include <queue>
#define INF 2147483647
using namespace std;
const int MAXN = 30010;
const int MAXM = 100010;
const double eps = 1e-10;
struct Edge{
int next, to;
double dis;
}e[MAXM];
int num, head[MAXN];
inline void Add(int from, int to, double dis){
e[++num] = (Edge){ head[from], to, dis }; head[from] = num;
}
int a[MAXM], b[MAXN], T, n, m, v[MAXN], now;
double dis[MAXN], c[MAXN];
queue <int> q;
/*int bfs(int x){
while(q.size()) q.pop();
q.push(x); cnt[x] = 1; v[x] = 1; dis[x] = 0;
while(q.size()){
now = q.front(); q.pop(); v[now] = 0;
for(int i = head[now]; i; i = e[i].next)
if(dis[e[i].to] > dis[now] + e[i].dis){
dis[e[i].to] = dis[now] + e[i].dis;
if(!v[e[i].to]){
if(++cnt[e[i].to] >= n) return 1;
v[e[i].to] = 1;
q.push(e[i].to);
}
}
}
return 0;
}*/
int dfs(int u){
v[u] = 1;
for(int i = head[u]; i; i = e[i].next)
if(dis[e[i].to] > dis[u] + e[i].dis){
dis[e[i].to] = dis[u] + e[i].dis;
if(v[e[i].to]) return 1;
if(dfs(e[i].to)) return 1;
}
v[u] = 0;
return 0;
}
int check(){
for(int i = 1; i <= n; ++i)
if(dfs(i))
return 1;
return 0;
}
double l = -1e7, r = 1e7, mid;
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; ++i)
scanf("%d%d%lf", &a[i], &b[i], &c[i]);
while(r - l > eps){
mid = (l + r) / 2;
for(int i = 1; i <= m; ++i)
Add(a[i], b[i], c[i] - mid);
if(check()) r = mid;
else l = mid;
for(int i = 1; i <= n; ++i)
head[i] = v[i] = dis[i] = 0;
num = 0;
}
printf("%.8lf\n", l);
return 0;
}

【洛谷 P3199】 [HNOI2009]最小圈(分数规划,Spfa)的更多相关文章

  1. [HNOI2009]最小圈 分数规划 spfa判负环

    [HNOI2009]最小圈 分数规划 spfa判负环 题面 思路难,代码简单. 题目求圈上最小平均值,问题可看为一个0/1规划问题,每个边有\(a[i],b[i]\)两个属性,\(a[i]=w(u,v ...

  2. 洛谷 P3199 [HNOI2009]最小圈

    P3199 [HNOI2009]最小圈 题目背景 如果你能提供题面或者题意简述,请直接在讨论区发帖,感谢你的贡献. 题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点 ...

  3. 【bzoj1486】[HNOI2009]最小圈 分数规划+Spfa

    题目描述 样例输入 4 5 1 2 5 2 3 5 3 1 5 2 4 3 4 1 3 样例输出 3.66666667 题解 分数规划+Spfa判负环 二分答案mid,并将所有边权减去mid,然后再判 ...

  4. 洛谷P3199 [HNOI2009]最小圈(01分数规划)

    题意 题目链接 Sol 暴力01分数规划可过 标算应该是这个 #include<bits/stdc++.h> #define Pair pair<int, double> #d ...

  5. [bzoj1486][HNOI2009]最小圈——分数规划+spfa+负环

    题目 传送门 题解 这个题是一个经典的分数规划问题. 把题目形式化地表示,就是 \[Minimize\ \lambda = \frac{\sum W_{i, i+1}}{k}\] 整理一下,就是 \[ ...

  6. 【BZOJ1486】[HNOI2009]最小圈 分数规划

    [BZOJ1486][HNOI2009]最小圈 Description Input Output Sample Input 4 5 1 2 5 2 3 5 3 1 5 2 4 3 4 1 3 Samp ...

  7. Luogu3199 HNOI2009 最小圈 分数规划、SPFA

    传送门 可以发现它的式子是一个分数规划的式子,所以可以二分答案,将所有边权减掉当前二分值之后跑一边$SPFA$判断负环即可. 然而这道题把$BFS-SPFA$卡掉了却没卡$DFS-SPFA$ 出题人: ...

  8. 洛谷2494 [SDOI2011]保密 (分数规划+最小割)

    自闭一早上 分数规划竟然还能被卡精度 首先假设我们已经知道了到每个出入口的时间(代价) 那我们应该怎么算最小的和呢? 一个比较巧妙的想法是,由于题目规定的是二分图. 我们不妨通过最小割的形式. 表示这 ...

  9. 【BZOJ1486】【HNOI2009】最小圈 分数规划 dfs判负环。

    链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...

  10. 洛谷P3778 [APIO2017]商旅——01分数规划

    题目:https://www.luogu.org/problemnew/show/P3778 转化有点技巧: 其实直接关注比率的上下两项,也就是盈利和时间: 通过暴枚和 floyd 可以处理出两两点间 ...

随机推荐

  1. 【第二周】scrum站立会议

    1.站立会议:敏捷软件开发方法论Scrum的相关技术之一,是scrum的最佳实践 2.具体形式:每天的同一时间让团队成员面对面站立交流工作进展 3.功能: (1)让团队所有人都相互知道彼此的进展,了解 ...

  2. 利用C#进行文件读写的方法选择总结

    小的文本文件(100M以下)直接用File类的ReadAllText()和WriteAllText()方法 这两个方法内部其实就是封装了StreamReader类的ReadToEnd()和Stream ...

  3. Hibernate 中 load() 方法导致的 noSession 异常

    之所以要写这个,是因为最近碰到了一个延迟加载的 load() 导致出现 noSession 的异常. 下面第三种方式解决这个问题需要用到一个本地线程的对象,也就是 ThreadLocal 类,之前写过 ...

  4. DjangoORM外键操作

    Django ORM 外键操作 经常修改的东西一般不放到内存里面,而是放到一张表里.表跟表之间是可以存在关系的,最基本的就是一对多的关系. models.ForeignKey(ColorDic) 1. ...

  5. QT创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束的简单示例

    QT创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束的简单示例 部分代码: // 创建模态对话框阻塞整个应用程序和非模态对话框唯一性约束 QMenu *pDialog = mBar->ad ...

  6. Linux基础-正则表达式整理---------------grep、sed、awk

    目录:    Ⅰ:正则表达式    Ⅱ:作业 Ⅰ:正则表达式 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 在lin ...

  7. 《剑指offer》— JavaScript(11)二进制中1的个数

    二进制中1的个数 题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路一 用1和n进行位运算,结果为1则n的二进制最右边一位为1,否则为0: 将n二进制形式右移1位,继续与 ...

  8. php的错误处理机制

    看tp5源码的,补充下 error_reporting(E_ALL); set_error_handler([__CLASS__, 'appError']); set_exception_handle ...

  9. angular2 获取到的数据无法实时更新的问题

    在修改完组件数据之后调用下面两句: this.changeDetectorRef.markForCheck(); this.changeDetectorRef.detectChanges(); 注入到 ...

  10. 赤池信息量准则 ( Akaike information criterion)

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...