bzoj 2878: [Noi2012]迷失游乐园
#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]迷失游乐园的更多相关文章
- BZOJ 2878: [Noi2012]迷失游乐园( 树形dp )
一棵树的话直接树形dp(求出往下走和往上走的期望长度). 假如是环套树, 环上的每棵树自己做一遍树形dp, 然后暴力枚举(环上的点<=20)环上每个点跑经过环上的路径就OK了. -------- ...
- bzoj 2878 [Noi2012]迷失游乐园——树上的期望dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2878 很好的树上概率题的思路,就是分成up和down. 代码中有众多小细节.让我弃疗好几天的 ...
- bzoj 2878: [Noi2012]迷失游乐园【树上期望dp+基环树】
参考:https://blog.csdn.net/shiyukun1998/article/details/44684947 先看对于树的情况 设d[u]为点u向儿子走的期望长度和,du[u]为u点的 ...
- 【BZOJ 2878】 2878: [Noi2012]迷失游乐园 (环套树、树形概率DP)
2878: [Noi2012]迷失游乐园 Description 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩.进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点.m ...
- 2878: [Noi2012]迷失游乐园 - BZOJ
Description 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩.进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点.m条道路的无向连通图,且该图中至多有一个环( ...
- BZOJ 2878([Noi2012]-失落的游乐园树DP+出站年轮加+后市展望DP+vector的erase)
2878: [Noi2012]迷失乐园 Time Limit: 10 Sec Memory Limit: 512 MBSec Special Judge Submit: 319 Solved: ...
- [bzoj2878][Noi2012]迷失游乐园(基环树dp)
[bzoj2878][Noi2012]迷失游乐园(基环树dp) bzoj luogu 题意:一颗数或是基环树,随机从某个点开始一直走,不走已经到过的点,求无路可走时的路径长期望. 对于一棵树: 用两个 ...
- 【BZOJ 2878】 [Noi2012]迷失游乐园
Description 放假了,小Z觉得呆在家里特别无聊,于是决定一个人去游乐园玩.进入游乐园后,小Z看了看游乐园的地图,发现可以将游乐园抽象成有n个景点.m条道路的无向连通图,且该图中至多有一个环( ...
- NOI2012 : 迷失游乐园
终于补完NOI2012了好开心~ 题目大意:给定一棵树或者环套外向树,求出从中随机选一条简单路径的期望长度,环上点数不超过20. 设 d[x]表示x的度数,ch[x]表示x孩子个数 up[x]表示x向 ...
随机推荐
- [转]装完CentOS后,重新开机启动后显示: Initial setup of CentOS Linux 7 (core)
转:装完Centos7提示Initial setup of CentOS Linux 7 (core) 在用U盘装完CentOS后,重新开机启动后显示: Initial setup of Cent ...
- MSDeploy
http://blogs.iis.net/jamescoo/default.aspx Web Deployment Tool Now Works With Credential Store Feb ...
- System.IO.File.Create 不会自动释放,一定要Dispose
这样会导致W3P进程一直占用这个文件 System.IO.File.Create(HttpContext.Current.Server.MapPath(strName)) 最好加上Dispose Sy ...
- ambari之hbase数据迁移
一.hbase原理剖析 Base是一个构建在HDFS上的分布式列存储系统:HBase是基于Google BigTable模型开发的,典型的key/value系统:HBase是Apache Hadoop ...
- Spring中处理Post方法中文乱码
在Web.xml中配置: <!-- 注册Spring提供的处理Post请求的乱码问题 --> <filter> <filter-name>CharacterEnco ...
- 关于token的杂记
http://www.cnblogs.com/xiekeli/p/5607107.html https://www.oschina.net/question/1264088_220768 token作 ...
- LabVIEW串口通信
Instrument I/O 利用LabVIEW内置的驱动程序库和具有工业标准的设备驱动软件,可对 GPIB(通用接口总线).Ethernet(以太网)接口.RS-232(标准串行接口总线)/RS-4 ...
- [Prodinner项目]学习分享_第一部分_Model层
事先声明一下,小弟我是菜鸟一个,在研究大半天之后,基本会开发一些简单的功能了,特此分享一下,也为自己做一个笔记. 项目简介: MVC4 , EF5 , Code First , 多层架构 开发工具:V ...
- iOS - Git 代码版本管理
1.Git Git 是用 C 语言开发的分布版本控制系统.版本控制系统可以保留一个文件集合的历史记录,并能回滚文件集合到另一个状态(历史记录状态).另一个状态可以是不同的文件,也可以是不同的文件内容. ...
- Vim入门教程
尽管网上有成打的Vim在线教程,但是要么艰深晦涩,要么太过肤浅.本教程的目标让每个阶段都有斩获,从理解它的哲学(将和你终身相伴)到超越现在编辑技巧,成为其中的牛人. 简单来说,本教程的学习方式将使你终 ...