#结论#洛谷 3199 [HNOI2009]最小圈
题目
求有向图最小平均权值回路。
\(n\leq 3*10^3,m\leq 10^4\)
分析
设 \(f_k(x)\) 表示从点 \(x\) 出发恰好走 \(k\) 条边的最短路,
那么答案就是 \(\min_{x=1}^n\max_{k=0}^{n-1}\frac{f_n(x)-f_k(x)}{n-k}\)
所以直接 \(O(nm)\) 就可以了,证明见_rqy dalao的博客
0/1分数规划的方法理论应该会T这里就不写了,不过只要任意点都可以作为起点那么初始值都为0就可以了
代码
#include <cstdio>
#include <cctype>
#include <cstring>
#define rr register
using namespace std;
const int N=3411; typedef double db;
int as[N],n,m; db f[N][N],ans=1e15;
struct node{int y; db w; int next;}e[N*3];
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline void Max(db &x,db y){x=x>y?x:y;}
inline void Min(db &x,db y){x=x<y?x:y;}
signed main(){
n=iut(); m=iut();
for (rr int i=1;i<=m;++i){
rr int x=iut(),y=iut();
rr db w; scanf("%lf",&w);
e[i]=(node){y,w,as[x]},as[x]=i;
}
for (rr int i=1;i<=n;++i){
for (rr int x=1;x<=n;++x) f[i][x]=1e15;
for (rr int x=1;x<=n;++x)
if (f[i-1][x]!=1e15)
for (rr int j=as[x];j;j=e[j].next)
Min(f[i][e[j].y],f[i-1][x]+e[j].w);
}
for (rr int i=1;i<=n;++i){
rr db now=-1e15;
for (rr int j=0;j<n;++j)
Max(now,(f[n][i]-f[j][i])/(n-j));
Min(ans,now);
}
return !printf("%.8lf",ans);
}
0/1分数规划代码
#include <cstdio>
#include <cctype>
#include <cstring>
#define rr register
using namespace std;
const int N=3011; int as[N],n,m; bool v[N]; double dis[N];
struct node{int y; double w; int next;}e[N*5];
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline bool dfs(int x,double mid){
v[x]=1;
for (rr int i=as[x];i;i=e[i].next)
if (dis[e[i].y]>dis[x]+e[i].w-mid){
if (v[e[i].y]) return 0;
dis[e[i].y]=dis[x]+e[i].w-mid;
if (!dfs(e[i].y,mid)) return 0;
}
v[x]=0;
return 1;
}
signed main(){
n=iut(); m=iut();
for (rr int i=1;i<=m;++i){
rr int x=iut(),y=iut();
rr double w; scanf("%lf",&w);
e[i]=(node){y,w,as[x]},as[x]=i;
}
for (rr int i=1;i<=n;++i)
e[i+m]=(node){i,0,as[n+1]},as[n+1]=m+i;
rr double l=-5000,r=5000;
while (l+1e-9<r){
rr double mid=(l+r)/2;
for (rr int i=1;i<=n+1;++i) dis[i]=v[i]=0;
if (dfs(n+1,mid)) l=mid;
else r=mid;
}
return !printf("%.8lf",l);
}
#结论#洛谷 3199 [HNOI2009]最小圈的更多相关文章
- 洛谷 P3199 [HNOI2009]最小圈
P3199 [HNOI2009]最小圈 题目背景 如果你能提供题面或者题意简述,请直接在讨论区发帖,感谢你的贡献. 题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点 ...
- 洛谷P3199 [HNOI2009]最小圈(01分数规划)
题意 题目链接 Sol 暴力01分数规划可过 标算应该是这个 #include<bits/stdc++.h> #define Pair pair<int, double> #d ...
- 洛谷4951 地震 bzoj1816扑克牌 洛谷3199最小圈 / 01分数规划
洛谷4951 地震 #include<iostream> #include<cstdio> #include<algorithm> #define go(i,a,b ...
- bzoj 1486: [HNOI2009]最小圈 dfs求负环
1486: [HNOI2009]最小圈 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1022 Solved: 487[Submit][Status] ...
- BZOJ 1486: [HNOI2009]最小圈( 二分答案 + dfs判负圈 )
二分答案m, 然后全部边权减掉m, 假如存在负圈, 那么说明有平均值更小的圈存在. 负圈用dfs判断. ------------------------------------------------ ...
- BZOJ_1486_[HNOI2009]最小圈_01分数规划
BZOJ_1486_[HNOI2009]最小圈_01分数规划 Description Input Output Sample Input 4 5 1 2 5 2 3 5 3 1 5 2 4 3 4 1 ...
- [HNOI2009]最小圈 (二分答案+负环)
题面:[HNOI2009]最小圈 题目描述: 考虑带权的有向图\(G=(V,E)\)以及\(w:E\rightarrow R\),每条边\(e=(i,j)(i\neq j,i\in V,j\in V) ...
- bzoj千题计划227:bzoj1486: [HNOI2009]最小圈
http://www.lydsy.com/JudgeOnline/problem.php?id=1486 二分答案 dfs版spfa判负环 #include<queue> #include ...
- 【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 ...
- BZOJ1486 HNOI2009 最小圈 【01分数规划】
BZOJ1486 HNOI2009 最小圈 Description 应该算是01分数规划的裸板题了吧..但是第一次写还是遇到了一些困难,vis数组不清零之类的 假设一个答案成立,那么一定可以找到一个环 ...
随机推荐
- win32-UpdateLayeredWindow
创建半透明的窗口,以及在窗口上绘制不透明的文本 方法: 创建Bitmap具有PixelFormat32bppPARGB像素格式的GDI + 对象. 创建一个Graphics对象以绘制该Bitmap对象 ...
- 【Azure 应用服务】可以在app service里建SFTP服务吗?
问题描述 怎样可以在App Service里建SFTP服务? 并不是说通过FTP的方式进行App Service的文件部署. 问题回答 不能通过 App Service 来搭建总计的SFTP服务,因为 ...
- X86模拟龙芯与编译 .NET CoreCLR
目录 .NET 收到一台龙芯机器 编译 CoreCLR 环境要求 部署虚拟机与环境 Linux 安装 KVM 下载需要的文件 启动模拟器 下载 CoreCLR 尝试编译 CoreCLR 前段时间得知龙 ...
- 机器学习可解释性--LIME
A Unified Approach to Interpreting Model Predictions trusting a prediction or trusting a model 如果⼀个机 ...
- Python 中read()、 readline() 、readlines()三者之间的区别?
read()方法用于一次性读取整个文件的内容,并将其作为一个字符串返回. readline()方法用于逐行读取文件的内容.每次调用readline()方法,它会读取文件的下一行,并将其作为一个字符串返 ...
- 玩转Vue3之Composables
前言 Composables 称之为可组合项,熟悉 react 的同学喜欢称之为 hooks ,由于可组合项的存在,Vue3 中的组件之间共享状态比以往任何时候都更容易.这种新范例引入了一种更有组织性 ...
- .vscode\settings.json .gitignore 项目文件配置
一.项目本地新增配置文件: .vscode\settings.json { // editor "editor.formatOnSave": true, "e ...
- echo: nice day
乐开花了,echo 姑娘,很合我的胃口,活泼.俏皮.专业.三观出乎的齐,第一次遇见这种默契度如此高的,你说半句我懂,我说半句你懂,太完美了,以前感觉和女生沟通太累,聊几句就 game over,我这是 ...
- NA嵌入Flutter页面
目录介绍 01.Android承载flutter容器 02.过时的NA跳转flutter方案 03.升级版本NA跳转Flutter处理 04.如何处理NA跳转flutter传参 05.思考遇到的几个问 ...
- 记录--谁还没个靠bug才能正常运行的程序
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近遇到一个问题,计算滚动距离,滚动比例达到某界定值时,显示mask,很常见吧^ _ ^ 这里讲的不是这个需求的实现,是其中遇到了一个比较 ...