2月4日 考试——迟到的 ACX
迟到的 ACX
时限:1s
内存限制:128MB
题目描述:
今天长沙下雪了,小 ACX 在上学路上欣赏雪景,导致上学迟到,愤怒的佘总给 ACX 巨佬出了一个题目想考考
他,现在他找到你,希望你能帮帮他。
对于一张有向图,要你求图中最小环的平均值最小是多少,即若一个环经过 k 个节点,那么这个环的平均值为
环上 k 条边权的和除以 k,现要求其中的最小值。
考虑到在座的各位都是巨佬,本题需要保留小数点后面八位。
读入格式:
第一行 2 个正整数,分别为 n 和 m ,并用一个空格隔开,分别表示图中有 n 个点 m 条边。 接下来 m 行,
每行 3 个数 i,j,w 表示有一条边(i,j)且该边的权值为 w。输入数据保证图连通,存在环且有一个点能到达其他所有
点。
输出格式:
请输出一个实数及最小环的平均值,要求输出到小数点后 8 位。
样例输入:
4 5
1 2 5
2 3 5
3 1 5
2 4 3
4 1 3
样例输出:
3.66666667
数据范围:
100%的数据: n<=3000 m<=10000 |wi,j|<=10^7
Solution:
看到这题一个很好的思路就是二分答案,把问题转化成判定性问题。二分答案后,将每条边的边权都减去答案Ans,那么问题就转变成了判定一幅图中是否存在负环,一个经典的做法就是用Spfa,判断一个点有没有被加入超过N次,如果有则存在负环,可是这个复杂度是O(NM)的,不能通过本题。还有一种判负环的思想就是用Dfs来跑Spfa,然后一个点重复出现时就存在负环。具体实现可以一开始把所有点的初始距离设为0,然后枚举以每个点位开头是否存在负环,因为一个负环总有一个位置开始到每个点的路径都是负数。用这种做法就可以通过本题了。
代码:
1 /*本题不要想歪,直接二分+spfa,不多bb——by 520*/ 2 #include<bits/stdc++.h> 3 #define il inline 4 #define ll long long 5 #define debug printf("%d %s\n",__LINE__,__FUNCTION__) 6 using namespace std; 7 int n,m,cnt,h[3020]; 8 double dis[3020],ans; 9 struct edge{ 10 int to,net;double val; 11 }e[52000]; 12 bool vis[3020],bj; 13 il void add(int u,int v,double w) 14 { 15 e[++cnt].net=h[u],h[u]=cnt,e[cnt].to=v,e[cnt].val=w; 16 } 17 il void spfa(int x) 18 { 19 vis[x]=1; 20 for(int i=h[x];i;i=e[i].net){ 21 int v=e[i].to; 22 if(dis[x]+e[i].val-ans<dis[v]){ 23 if(vis[v]){ bj=1;return;} 24 dis[v]=dis[x]+e[i].val-ans; 25 spfa(v); 26 if(bj)return; 27 } 28 } 29 vis[x]=0; 30 } 31 il bool check() 32 { 33 memset(dis,0,sizeof(dis)); 34 memset(vis,0,sizeof(vis)); 35 for(int i=1;i<=n;i++){ 36 bj=0;spfa(i); 37 if(bj)return 1; 38 } 39 return 0; 40 } 41 int main() 42 { 43 freopen("late.in","r",stdin); 44 freopen("late.out","w",stdout); 45 scanf("%d%d",&n,&m); 46 int u,v;double w; 47 for(int i=1;i<=m;i++)scanf("%d%d%lf",&u,&v,&w),add(u,v,w); 48 double l=-2333333,r=2333333; 49 while(r-l>1e-9){ 50 ans=(l+r)/2; 51 if(check())r=ans; 52 else l=ans; 53 } 54 printf("%.8lf",ans); 55 return 0; 56 }
转载于:https://www.cnblogs.com/five20/p/8413111.html
2月4日 考试——迟到的 ACX相关推荐
- 2020年2月15日 考试【更新中】
2020年2月15日 考试 又是一次不成功的考试,在很小的地方屡次摔跤,摔到心态失衡,这次考试就很难再翻身了.再被抬了两手的情况下才勉强AC了两道水题,而错误的原因却是最细微的地方没有考虑到.最后才自 ...
- 2017年3月26日考试总结
2017年3月26日考试总结 这次考试总体来说要比上一次考试水一点,前两道题都比较好做,就是一个小贪心,而后面两道题的话,对于第三题,还稍微有点思路,推出的结论也和题解有几分相似,而第四题则是完全没有 ...
- 【HCIE考试喜报】2022年11月11日考试通过
网络工程师认证:HCIE(华为ICT专家认证)_微思xmws的博客-CSDN博客_hcie证书华为HCIE课程介绍HCIE认证概述HCIE-R&S认证定位于大中型复杂网络的构建.优化和管理.H ...
- 05年11月6日考试模拟题
网络工程师模拟考试题 网络工程师模拟试题(2005 年下半年) 上午试题: ●浮点数的表示范围和精度取决于(1). A.阶码的位数和尾数的位数 B.阶码采用的编码和位数的位数 C.阶码采用的编码和位数 ...
- 概率速度2013年阿里巴巴暑期实习生笔试题--2013年5月5日考试
题记:写这篇博客要主是加深自己对概率速度的意识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 昨天来本想去加入北大的口试,结果去了说不给霸笔,尼玛,好吧,哥又乖乖的回来了,在现有网上有 ...
- PMP考试最新官方通知:11月28日考试确定延期
对于备考不充分的考生来说,可能还在窃喜, 对于本来是备考9月份考试的考生来说,无疑晴天霹雳,又又又要拉长备考战线了. 这疫情真是太折磨人...
- 2020年2月15日 考试
一如既往的菜...... 机器人 关键是转换的方法 #include <bits/stdc++.h>using namespace std;typedef long long ll; st ...
- pmp 2021年6月20日考试原题分享
题目为原题 答案仅供参考 还是要听培训机构老师的答案. 问题:对于一个新的研发项目,必须估算一些有风险活动的成本.为确保高准确性,项目经理应该使用什么估算技术? A:参数估量 B:类比估量 C:质量成 ...
- [230501] 4月29日考试真题第一篇|Temporary Pools
题目来源:http://t.csdn.cn/goCDT 正确率:6/10 目录 Temporary Pools 题目 Temporary Pools Paragraph 1: Tempo ...
最新文章
- java同步队列与阻塞队列
- 电信业务支撑报表开发工具解决方案
- delphi listview动态添加图片_网站图片如何优化适合收录
- 如何在Windows 2000的域环境中自动分发软件
- 网站被黑搜索快照被劫持怎么办
- 那些你踩过的币圈投资陷阱(下)
- php获取excel表格内容,利用PHPExcel如何读取表格中内容
- 声学漫谈之五:音腔是怎么影响声音效果的
- KnockoutJS 3.X API 第七章 其他技术(2) 使用扩展器来增加可观察量(监控属性)
- 计算机三级之嵌入式系统学习笔记4
- RESTful 架构详解设计模式一种约束
- C语言结构体定义 typedef struct
- JetBrains(Intellij, pycharm)多行编辑模式
- json数组对象转js数组对象
- diskgenius克隆硬盘无法启动_克隆分区
- 《CryENGINE+Game+Programming+with+C++,+C#,+and+Lua》第七章
- 计算机应用能力考试ppt2003,全国专业技术人员计算机应用能力考试_PPT_2003_题库版...
- 2000字精华总结,安利一个超好用的 Python 数据分析神器
- CMOS图像传感器——深入ISO
- 短信验证码有什么应用和作用