cf839C Journey题解
来源:互联网 发布:数据库系统中分量 编辑:程序博客网 时间:2024/06/05 16:27
又一次愉快的题意杀……
参考:http://margatroid.xyz/2017-08-12-Codeforces-Round-428-Div-2-C/
题意如果用一句话说就是:求一颗树深度的期望。
数据的输入表示两个节点的连通……我一直以为是有向线段orz
先来思考期望怎么求,期望=概率*权重,这里的权重就是叶节点的深度。而概率P[a]=P[father[a]]*(son of father[a])
可能这么说有些迷,不过各位可以想一下,看成一道生物计算题,母亲白化的前概率1/4,父亲为显性杂合子,那么孩子白化的概率就是1/4*1/2=1/8.实际上这就相当于一棵树的父节点有两个子节点,如果原本的父节点概率为1/4,那么子节点的概率就是1/4*1/2=1/8。
好了,我们不必开个数组存fa[x],事实上这也挺难存,在搜索的时候顺带加一个参数就好了。而且反正cf跑的快,STL随便用,多愉快。程序:
#include <bits/stdc++.h>using namespace std;#define maxn 100003typedef long double ld;vector<int> v[maxn];ld ed;void dfs(int i,int fa,int p,ld pro){ if(v[i].size()==1&&i!=1) ed+=p*pro; vector<int>::iterator vi; for(vi=v[i].begin();vi!=v[i].end();++vi){ if(*vi==fa) continue; dfs(*vi,i,p+1,pro/(i==1?(v[i].size()):(v[i].size()-1))); }}int main(){ int n; cin>>n; int p,q; for(int i=1;i<n;++i){ cin>>p>>q; v[p].push_back(q); v[q].push_back(p); } dfs(1,-1,0,1); cout<<fixed<<setprecision(15)<<ed<<endl; return 0;}
阅读全文
0 0
- cf839C Journey题解
- POJ 2488 A Knight's Journey题解
- Journey
- POJ 2488 A Knight's Journey 递归回溯题解
- 【poj 2488】A Knight's Journey 中文题意&题解&代码(C++)
- journey beginning
- Tomorrow journey
- Journey Start
- Journey(CDOJ1655)
- UESTC Journey
- Journey Project
- CF374 Journey
- C. Journey
- [CF721C]Journey
- Codeforces839C Journey
- C. Journey
- 题解
- 题解
- mybatis学习笔记2 -- springboot 多数据源
- leetcode 191. Number of 1 Bits
- libc、glibc和glib的关系
- 生成验证码图片(二)
- 数据库锁机制
- cf839C Journey题解
- leetcode 209. Minimum Size Subarray Sum
- android如何获取应用版本号和版本名称
- 如何创建并运行java线程
- 【集训Day4 动态规划】蛙人
- webpack.config.js加载文件过程
- 《马云给年轻人的77条忠告》读书笔记3
- 数据结构-数组
- 网易2018校招内退编程题 独立的小易