前言:模拟赛考试题,不会做,写了个爆搜滚蛋仍然保龄。

---------------------

题目链接

题目大意:给定一张有向图,求一个环,使得这个环的长度与这个环的大小(所含结点个数)的比值最小。输出这个比值,保留8位小数。保证数据有解。

---------------------

转化一下题意。要求是使得$C=\frac{\sum\limits_{i=1}^k w[i]}{\sum\limits_{i=1}^k b[i]},b[i]=1$最小。等式变换,得到$\sum\limits_{i=1}^k w[i]-C=0$。我们可以二分这个$C$然后判断有没有负环即可。

貌似看题解是$01$分数规划,我也不太懂。理论上复杂度是$O(nm\log_2 (r-l))$,不过因为算法比较高效也能卡过去。

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=;
const double eps=1e-;
int n,m,vis[maxn];
int head[maxn*],cnt;
struct node
{
int next,to;
double dis;
}edge[maxn*];
double dis[maxn];
inline void add(int from,int to,double dis)
{
edge[++cnt].next=head[from];
edge[cnt].to=to;
edge[cnt].dis=dis;
head[from]=cnt;
}
inline bool spfa(int now,double mid)
{
vis[now]=;
for (int i=head[now];i;i=edge[i].next)
{
int to=edge[i].to;
if (dis[to]>dis[now]+edge[i].dis-mid)
{
dis[to]=dis[now]+edge[i].dis-mid;
if (vis[to]||spfa(to,mid)) return ;
}
}
vis[now]=;
return ;
}
inline bool check(double mid)
{
for (int i=;i<=n;i++) dis[i]=,vis[i]=;
for (int i=;i<=n;i++) if (spfa(i,mid)) return ;
return ;
}
int main()
{
cin>>n>>m;
for (int i=;i<=m;i++)
{
int x,y;double z;cin>>x>>y>>z;
add(x,y,z);
}
double l=-1e7,r=1e7;
while(r-l>eps)
{
double mid=(l+r)/2.0;
if (check(mid)) r=mid;
else l=mid;
}
printf("%.8lf",r);
return ;
}

最新文章

  1. NSJSONSerialization
  2. Installing Oracle and ArcSDE on separate servers
  3. javascript限制上传文件大小
  4. Java学习资源
  5. Sqoop安装配置及数据导入导出
  6. Android 架构
  7. HashMap的一般用法以及遍历方法
  8. ALT+数字,可输入汉字或拉丁字母 good
  9. [React Native] Up and Running
  10. 封装对Cookie和Session设置或取值的类
  11. hdu 5124
  12. js 删除效果代码
  13. C#解析JSON数据
  14. S3C6410 纯粹的裸机启动,自己写的SD BOOT启动
  15. 2017-3-10 SQL server 数据库 T--SQL语句
  16. Selenium 高阶应用之WebDriverWait 和 expected_conditions
  17. swift 获取文件大小
  18. 浅谈使用git进行版本控制
  19. C# winform引用com组件,创建AXHOST组件失败解决方案
  20. Linux 如何使用echo指令向文件写入内容

热门文章

  1. 005.Nginx配置下载站点
  2. python使用数组实现链表的策略分析
  3. Django框架02 /Django下载安装、url路由分发
  4. hihoCoder 1114 小Hi小Ho的惊天大作战:扫雷&#183;一 最详细的解题报告
  5. bzoj2160拉拉队排练
  6. OSCP Learning Notes - Buffer Overflows(3)
  7. 带你上手阿里开源的 Java 诊断利器:Arthas
  8. PagedList分页,如何添加action参数
  9. C++语法小记---前置操作符和后置操作符
  10. 题解 CF785E 【Anton and Permutation】