二分+dfs。

这道题求图的最小环的每条边的权值的平均值μ。

这个平均值是大有用处的,求它我们就不用记录这条环到底有几条边构成。

如果我们把这个图的所有边的权值减去μ,就会出现负环。

所以二分求解。

#include<cstdio>
#include<algorithm>
#include<cstring>
#define eps 1e-10
using namespace std;
const int maxn = + ;
const int maxm = + ;
int g[maxn],v[maxm],next[maxm],eid;
double w[maxm],dist[maxn],e[maxm],c;
bool vis[maxn];
int n,m; void addedge(int a,int b,double c) {
v[eid]=b; w[eid]=c; next[eid]=g[a]; g[a]=eid++;
} void build() {
memset(g,-,sizeof(g));
scanf("%d%d",&n,&m);
for(int i=,a,b;i<=m;i++) {
scanf("%d%d%lf",&a,&b,&c);
addedge(a,b,c);
}
} bool dfs(int u) {
vis[u]=;
for(int i=g[u];~i;i=next[i]) if(dist[v[i]]>dist[u]+e[i]) {
if(vis[v[i]]) return true;
dist[v[i]]=dist[u]+e[i];
if(dfs(v[i])) return true;
}
vis[u]=;
return false;
} bool calc() {
memset(dist,,sizeof(dist));
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++) if(dfs(i)) return ;
return ;
} void solve() {
double l = -1e9,r=1e9,mid;
while(r-l>=eps) {
mid=(l+r)/;
for(int u=;u<=n;u++)
for(int i=g[u];~i;i=next[i])
e[i]=w[i]+mid;
if(calc()) l=mid;
else r=mid;
}
printf("%.8lf\n",-l);
} int main() {
build();
solve();
return ;
}

最新文章

  1. 开发Android 范的错误
  2. Spring事务注解@Transactional回滚问题
  3. tornado框架之路三之ajax
  4. rails console --sandbox出现的安装错误解决方案
  5. 剑指offer-面试题7:俩个栈实现队列(java)
  6. #6 ipdb模块源代码解读
  7. Python-form表单标签
  8. 记一个centos分区大小调整过程
  9. Sql Server利用游标批量清空数据表
  10. JS Function类型
  11. BZOJ4229选择——LCT+并查集+离线(LCT动态维护边双连通分量)
  12. Codeforces Round #322 (Div. 2) E F
  13. 当超强台风“山竹”即将冲进南海,Power BI 你怎么看?
  14. linux下svn版本控制的常用命令大全
  15. 【Spark】SparkStreaming-CPU资源设置的蹊跷
  16. STL与泛型编程(第一周)
  17. 解决win10激活错误代码0xc004c003
  18. Docker:Err http://archive.ubuntu.com trusty InRelease &amp; E: Unable to locate package [name] 问题
  19. CListBox自动换行显示
  20. FastAdmin 中使用 Oder by if 强行将某一类放到前面

热门文章

  1. Careercup - Facebook面试题 - 5761467236220928
  2. SQL SERVER字符串函数
  3. sampler state
  4. ios开发之数据存取1-SQLite
  5. 几款实用的 JavaScript 图形图表库
  6. Capsule:开源的 JVM 应用部署工具
  7. Dijsktra算法C++实现
  8. IOS:利用dispatch_once创建单例
  9. eclipse的设置和优化
  10. HttpServletRequestWrapper的使用