题意描述:

   见原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 ;
}

最新文章

  1. Spring系列:学习Spring的资源和讨论
  2. 未来的 Web:九个不可思议的 WebGL 应用试验
  3. 包介绍 - Fluent Validation (用于验证)
  4. storyboard pushViewController 的时候,新的界面黑屏
  5. Leetcode#129 Sum Root to Leaf Numbers
  6. MFC窗口风格 WS_style/WS_EX_style(超详细)
  7. Android开源项目整理:个性化空间View篇(看遍论坛千万篇,不看此篇也枉然)
  8. struts配置时遇到的几个问题
  9. 详谈typedef的用法
  10. ssh登陆设置快捷方式
  11. centos安装wget 及配置(转)
  12. crontab使用和格式
  13. [nRF51822] 16、nRF51822的随机数生成器,及随机数生成器的一些知识(可以帮您补补随机数发生器的知识)
  14. Python实战之用类的静态方法实现登录验证
  15. 基于IndexedDB实现简单文件系统
  16. Jmeter_脚本参数化与内存溢出的解决方案
  17. node js 异步运行流程控制模块Async介绍
  18. 基于Vue cli生成的Vue项目的webpack4升级
  19. 6th week blog(1)
  20. 将数据以json字符串格式传到前台请求页面

热门文章

  1. linux下配置docker和splash(图文)
  2. MyBatis - 6.Spring整合MyBatis
  3. Android.os.SystemClock
  4. WPF 对控件进行截图且不丢失范围(转载)
  5. 如何保证Redis的高可用
  6. POJ 2914 Minimum Cut【最小割 Stoer-Wangner】
  7. PyTorch中的backward [转]
  8. python全栈开发day87~91-整个流程梳理、CRM功能、知识点梳理
  9. python全栈开发day65-templates:tags、母版和继承、组件、静态文件相关、simple_tag和inclusion_tag
  10. playbook role应用