LOJ #10084. 「一本通 3.3 练习 1」最小圈(二分+SPFA判负环)
题意描述:
见原LOJ:https://loj.ac/problem/10084
题解:
假设所求的平均最小值为X,环上各个边的权值分别为A1,A2...Ak,可以得到:
X=(A1+A2+A3+...+Ak)/K,
A1+A2+A3+...+Ak=X*K,
移项可得:(A1-X)+(A2-X)+(A3-X)+...+(Ak-X)=0,
另外注意到式子中的等于号可以改为大于等于,那么我们可以二分结果ans,然后判断是否存在一组解满足(A1+A2+A3+...+Ak)/k<=ans,
即判断:(A1-ans)+(A2-ans)+(A3-ans)+...+(Ak-ans)<=0;
最后问题就变成了二分一个ans后在图中判断是否存在一个负环。
#include<bits/stdc++.h>
using namespace std;
#define re register int
#define ll long long
#define INF 0x3f3f3f3f
#define maxn 30009
#define maxm 10009
#define eps 1e-9
inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+(ll)(ch-'');ch=getchar();}
return x*f;
}
bool flag;
bool vis[maxn];
double dis[maxn];
int head[maxn];
struct edge
{
int to,nxt;
double val;
}p[maxm];
int n,m,k,tot,cnt;
double ans,sum,l,r; void add(int x,int y,double z)
{
++cnt,p[cnt].to=y,p[cnt].nxt=head[x],p[cnt].val=z,head[x]=cnt;
} void Spfa(int u,double ave)
{
if(flag)
return ;
vis[u]=;
for(int i=head[u];i;i=p[i].nxt)
{
int v=p[i].to;
if(dis[u]+p[i].val-ave<dis[v])
{
dis[v]=dis[u]+p[i].val-ave;
if(!vis[v])
Spfa(v,ave);
if(flag)
return ;
else if(vis[v])
{
flag=true;
return ;
}
}
}
vis[u]=;
}
bool Check(double ave)
{
flag=false;
memset(vis,,sizeof(vis));
for(int j=;j<maxn;j++)
dis[j]=;
for(int i=;i<=n;i++)
{
Spfa(i,ave);
if(flag)
break;
}
return flag;
}
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
n=read(),m=read();
for(int i=;i<=m;i++)
{
int x=read(),y=read();
double z;scanf("%lf",&z);
add(x,y,z);
}
l=-1e7,r=1e7;
while((r-l)>eps)
{
double mid=(l+r)/;
if(Check(mid))
{
ans=mid;
r=mid;
}
else
l=mid;
}
printf("%0.8lf",ans);
fclose(stdin);
fclose(stdout);
return ;
}
LOJ #10084. 「一本通 3.3 练习 1」最小圈(二分+SPFA判负环)的更多相关文章
- LOJ#10117. 「一本通 4.1 练习 2」简单题
LOJ#10117. 「一本通 4.1 练习 2」简单题 题目描述 题目来源:$CQOI 2006$ 有一个$n$个元素的数组,每个元素初始均为$0$.有$m$条指令,要么让其中一段连续序列数字反转— ...
- LOJ#10064. 「一本通 3.1 例 1」黑暗城堡
LOJ#10064. 「一本通 3.1 例 1」黑暗城堡 题目描述 你知道黑暗城堡有$N$个房间,$M$条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设$D_i$为如果 ...
- LOJ #10131 「一本通 4.4 例 2」暗的连锁
LOJ #10131 「一本通 4.4 例 2」暗的连锁 给一棵 \(n\) 个点的树加上 \(m\) 条非树边 , 现在需要断开一条树边和一条非树边使得图不连通 , 求方案数 . $n \le 10 ...
- SPFA算法的SLF优化 ——loj#10081. 「一本通 3.2 练习 7」道路和航线
今天做到一道最短路的题,原题https://loj.ac/problem/10081 题目大意为给一张有n个顶点的图,点与点之间有m1条道路,m2条航线,道路是双向的,且权值非负,而航线是单向的,权值 ...
- Loj 10115 「一本通 4.1 例 3」校门外的树 (树状数组)
题目链接:https://loj.ac/problem/10115 题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的 ...
- LOJ #10132. 「一本通 4.4 例 3」异象石
题目地址 LOJ 题解 神仙思路.思路参考自<算法竞赛进阶指南>. 考虑维护dfs序中相邻两个石头的距离,那么每次?的答案就是sum/2(首尾算相邻) 然后维护一下拿个平衡树/set维护一 ...
- LOJ #10222. 「一本通 6.5 例 4」佳佳的 Fibonacci
题目链接 题目大意 $$F[i]=F[i-1]+F[i-2]\ (\ F[1]=1\ ,\ F[2]=1\ )$$ $$T[i]=F[1]+2F[2]+3F[3]+...+nF[n]$$ 求$T[n] ...
- LOJ#10065. 「一本通 3.1 例 2」北极通讯网络
题目链接:https://loj.ac/problem/10065 题目描述 原题来自:Waterloo University 2002 北极的某区域共有 nnn 座村庄,每座村庄的坐标用一对整数 ( ...
- LOJ#10106. 「一本通 3.7 例 2」单词游戏
题目链接:https://loj.ac/problem/10106 题目描述 来自 ICPC CERC 1999/2000,有改动. 有 NNN 个盘子,每个盘子上写着一个仅由小写字母组成的英文单词. ...
随机推荐
- Git推送错误Remote: User permission denied错误解决方法
用了别的同事的电脑,推送代码,报错. 解决方法: 修改别人的密码,改成自己的账号和密码就可以了.
- Idea的快捷键,瞎摸索,开心就好,哈哈哈
前言:如果你有强迫症,换了一个编辑器,最痛苦莫过于快捷键,不顺手了.这里自己瞎摸索的快捷键,贴一下,这里主要以实际应用为主,因为大量介绍的网上已经很多很多,So基本的不再叙述. 分享一下比较不错的Id ...
- 一脸懵逼学习Struts数据校验以及数据回显,模型驱动,防止表单重复提交的应用。
1:Struts2表单数据校验: (1)前台校验,也称之为客户端校验,主要是通过Javascript编程的方式进行数据的验证. (2)后台校验,也称之为服务器校验,这里指的是使用Struts2通过xm ...
- (原创)C# 压缩解压那些事儿
吐槽: 搜狗推广API的报告服务太坑爹了!!! 搜狗推广API的报告服务太坑爹了!!! 搜狗推广API的报告服务太坑爹了!!! 搜狗的太垃圾了,获取下来的压缩包使用正常方式无法解压!!没有专门的API ...
- jquery源码 整体架构
一.对外提供接口 对外提供了jQuery. //可以通过jQuery或者$来找到jQuery (function(window,undefined){ //(21,94) 定义了一些变量和函数 jQu ...
- zabbix邮箱报警设置&问题汇总
zabbix邮件报警部署! Zabbix监控服务端.客户端都已经部署完成,被监控主机已经添加,Zabiix监控运行正常,通过查看Zabbix监控服务器,可以了解服务器的运行状态是否正常,运维人员不会时 ...
- PHP加密解密方法,使用openssl加密解密
/** * des 加密算法 */ function do_mencrypt($input, $key) { if (!function_exists("mcrypt_module_open ...
- Kmeans:利用Kmeans实现对多个点进行自动分类—Jason niu
import numpy as np def kmeans(X, k, maxIt): numPoints, numDim = X.shape dataSet = np.zeros((numPoint ...
- POJ 3264 Balanced Lineup 【线段树】
<题目链接> 题目大意: 求给定区间内最大值与最小值之差. 解题分析: 线段树水题,每个节点维护两个值,分别代表该区间的最大和最小值即可. #include <cstdio> ...
- CVE-2011-0762环境搭建与EXP利用
CVE-2011-0762 vsftpd拒绝服务漏洞 危害:通过发送特殊构造的数据包.利用漏洞使应用程序崩溃 条件:连接上vsftpd才能发包 发现时间:2011-03-01 需求:找到EXP运行发送 ...