#include<iostream>
#include<cstring>
#include<cstdio>
#define M 100005
#define ld long double
int head[M],next[*M],u[*M],l[*M],n,m,cnt,du[M],v[M],root,now,fa[M],c[M];
ld d[M],f[M],g[M],gg[M];
using namespace std;
void jia(int a1,int a2,int a3)
{
cnt++;
u[cnt]=a2;
l[cnt]=a3;
next[cnt]=head[a1];
head[a1]=cnt;
return;
}
void dfs1(int a1)
{
v[a1]=;
for(int i=head[a1];i;i=next[i])
if(!v[u[i]]&&!c[u[i]])
{
dfs1(u[i]);
du[a1]++;
d[a1]+=f[u[i]]+(ld)l[i];
}
if(du[a1])
f[a1]=d[a1]/(ld)du[a1];
if(a1!=root)
du[a1]++;
return;
}
void dfs2(int a1)
{
v[a1]=;
for(int i=head[a1];i;i=next[i])
if(!v[u[i]]&&!c[u[i]])
{
int k=du[a1]-;
if(!k)
k++;
d[u[i]]+=(d[a1]-f[u[i]]-(ld)l[i])/(ld)k+(ld)l[i];
dfs2(u[i]);
}
return;
}
void zhao(int a1)
{
v[a1]=++now;
for(int i=head[a1];i;i=next[i])
if(!v[u[i]])
{
fa[u[i]]=a1;
zhao(u[i]);
}
else if(u[i]!=fa[a1]&&v[a1]>v[u[i]])
{
c[u[i]]=;
for(;a1!=u[i];)
{
c[a1]=;
a1=fa[a1];
}
}
return;
}
void huan(int a1,int fa)
{
bool kg=;
g[a1]=0.00000;
for(int i=head[a1];i;i=next[i])
if(c[u[i]]&&u[i]!=fa&&u[i]!=root)
{
kg=;
huan(u[i],a1);
g[a1]+=g[u[i]]+(ld)l[i];
}
if(a1==root)
return;
int k=du[a1];
if(!k)
k++;
if(kg)
g[a1]=d[a1]/(ld)k;
else
{
k=du[a1]+;
g[a1]=(g[a1]+d[a1])/(ld)k;
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int a1,a2,a3;
scanf("%d%d%d",&a1,&a2,&a3);
jia(a1,a2,a3);
jia(a2,a1,a3);
}
if(n==m+)
{
root=;
dfs1();
for(int i=;i<=n;i++)
v[i]=;
dfs2();
}
else
{
zhao();
for(int i=;i<=n;i++)
v[i]=;
for(int i=;i<=n;i++)
if(c[i])
{
root=i;
dfs1(i);
}
for(int i=;i<=n;i++)
if(c[i])
{
root=i;
huan(i,);
gg[i]=g[i];
}
for(int i=;i<=n;i++)
if(c[i])
{
du[i]+=;
d[i]+=gg[i];
}
for(int i=;i<=n;i++)
v[i]=;
for(int i=;i<=n;i++)
if(c[i])
dfs2(i);
}
double ans=0.00000;
for(int i=;i<=n;i++)
ans+=d[i]/(ld)du[i];
printf("%.5lf\n",ans/(double)n);
return ;
}

基环树DP,先处理环外的子树,在递归处理环上的点。

bzoj 2878: [Noi2012]迷失游乐园的更多相关文章

  1. BZOJ 2878: [Noi2012]迷失游乐园( 树形dp )

    一棵树的话直接树形dp(求出往下走和往上走的期望长度). 假如是环套树, 环上的每棵树自己做一遍树形dp, 然后暴力枚举(环上的点<=20)环上每个点跑经过环上的路径就OK了. -------- ...

  2. bzoj 2878 [Noi2012]迷失游乐园——树上的期望dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2878 很好的树上概率题的思路,就是分成up和down. 代码中有众多小细节.让我弃疗好几天的 ...

  3. bzoj 2878: [Noi2012]迷失游乐园【树上期望dp+基环树】

    参考:https://blog.csdn.net/shiyukun1998/article/details/44684947 先看对于树的情况 设d[u]为点u向儿子走的期望长度和,du[u]为u点的 ...

  4. 【BZOJ 2878】 2878: [Noi2012]迷失游乐园 (环套树、树形概率DP)

    2878: [Noi2012]迷失游乐园 Description 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩.进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点.m ...

  5. 2878: [Noi2012]迷失游乐园 - BZOJ

    Description 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩.进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点.m条道路的无向连通图,且该图中至多有一个环( ...

  6. BZOJ 2878([Noi2012]-失落的游乐园树DP+出站年轮加+后市展望DP+vector的erase)

    2878: [Noi2012]迷失乐园 Time Limit: 10 Sec  Memory Limit: 512 MBSec  Special Judge Submit: 319  Solved:  ...

  7. [bzoj2878][Noi2012]迷失游乐园(基环树dp)

    [bzoj2878][Noi2012]迷失游乐园(基环树dp) bzoj luogu 题意:一颗数或是基环树,随机从某个点开始一直走,不走已经到过的点,求无路可走时的路径长期望. 对于一棵树: 用两个 ...

  8. 【BZOJ 2878】 [Noi2012]迷失游乐园

    Description 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩.进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点.m条道路的无向连通图,且该图中至多有一个环( ...

  9. NOI2012 : 迷失游乐园

    终于补完NOI2012了好开心~ 题目大意:给定一棵树或者环套外向树,求出从中随机选一条简单路径的期望长度,环上点数不超过20. 设 d[x]表示x的度数,ch[x]表示x孩子个数 up[x]表示x向 ...

随机推荐

  1. Coursera台大机器学习课程笔记3 – 机器学习的可能性

    提纲: 机器学习为什么可能? 引入计算橙球概率问题 通过用Hoeffding's inequality解决上面的问题,并得出PAC的概念,证明采样数据学习到的h的错误率可以和全局一致是PAC的 将得到 ...

  2. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数001·3D函数

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数001·3D函数 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“proce ...

  3. 安卓与PC网络对接实现视频实时播放

    研究安卓网络通信一段时间了,  由于最近公司催的比较紧, 硬着头皮弄出来了. 现在手机客户端终于能够连接流媒体服务器实时播放前端的视频流了. 其实通信方面主要还是命令包的解析, 以及分包组包. 比如要 ...

  4. 如何知道btree树的高度

    来自网络,总结到这里: 当我想看btree树高度的时候,筛选出来这篇文章"为什么 B-tree 在不同著作中度的定义有一定差别?",知道了高度的算法是这个公式:但是里面又提高t和出 ...

  5. ASP.net解析JSON例子

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  6. Android网络框架源码分析一---Volley

    转载自 http://www.jianshu.com/p/9e17727f31a1?utm_campaign=maleskine&utm_content=note&utm_medium ...

  7. draggable datagrid columns

    $.extend($.fn.datagrid.methods,{ columnMoving: function(jq){ return jq.each(function(){ var target = ...

  8. JAVA生成图片缩略图、JAVA截取图片局部内容

    package com.ares.image.test; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; ...

  9. Linux 概念架构的理解

    摘要 Linux kernel 成功的两个原因: 架构设计支持大量的志愿开发者加入到开发过程中: 每个子系统,尤其是那些需要改进的,都支持很好的扩展性. 正是这两个原因使得 Linux kernel ...

  10. UI设计的分类

    软件UI设计(界面设计包括硬件界面设计和软件界面设计,我们这里探讨的是软件界面设计)包括用户研究.交互设计.与界面设计三部分.   1,用户研究 我们再产品开发的前期,通过调查研究,了解用户的工作性质 ...