#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. strits2初始配置总结

    **************************************************************************************************** ...

  2. 关注微信 即可连上wifi 的设计思路

    这个功能之前是在知乎上有人在询问后台的实现逻辑,然后才知道的。其实对微信的各种关注,实在是不想沾惹。 但是这个功能很有意思,当我关注了你,那么就可以在你的店里上wifi 。如果取消则立刻不能上网。 这 ...

  3. IUS

    后端提取的sdf中可能是有negative timing 在interconnect上的,可能的原因是crosstalk之类的问题导致. negative timing在FF,clock的delay超 ...

  4. swif tableview全选

    func selctAll() { idArr.removeAll() for var i = 0; i<sellingArr.count; i++ { let path: NSIndexPat ...

  5. PHP获取毫秒时间戳,利用microtime()函数

    PHP获取毫秒时间戳,利用microtime()函数 php本身没有提供返回毫秒数的函数,但提供了一个microtime()函数,借助此函数,可以很容易定义一个返回毫秒数的函数.php的毫秒是没有默认 ...

  6. mysql出现“SELECT list is not in GROUP BY clause and contains nonaggregated column [duplicate]”错误提示

    项目跨平台时由于mysql设置的问题,原代码运行出现这个错误,此时把mysql设置改下就好了 sql_mode='NO_ENGINE_SUBSTITUTION'

  7. Unity在编辑器状态下清空控制台信息

    public static void ClearConsole() { var assembly = System.Reflection.Assembly.GetAssembly(typeof(Uni ...

  8. twemproxy - Proxy Server for Redis 安装测试

    1. 安装 (1) 系统环境 测试用的服务器为阿里云ECS,4核8G,CentOS6.3 64bit. 部署了3个Redis实例,监听端口号为7410,7420,7430,设置maxmemory为25 ...

  9. [问题2014S11] 复旦高等代数II(13级)每周一题(第十一教学周)

    [问题2014S11]  设 \(A,B\) 为 \(n\) 阶实对称阵, \(p(A),p(B),p(A+B)\) 分别为 \(A,B,A+B\) 的正惯性指数, 证明: \[p(A)+p(B)\g ...

  10. SpringMvc xml 配置

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" ...