Random Access Iterator
Random Access Iterator
树型概率DP
dp[u]代表以当前点作为根得到正确结果的概率
将深度最深的几个点dp[u]很明显是1
然后很简单的转移
有k次,但我们要先看一次的情况,然后再推到k次,k次中只要有一次就可以正确,所以求出k次全失败的概率,用1去减即可
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 1e6+7;
const int mod = 1e9+7;
vector<int>G[maxn];
int d[maxn],maxx;
ll dp[maxn];
ll qpow(ll n,ll k){
ll res=1;
while(k){
if(k&1) res=res*n%mod;
n=n*n%mod;
k>>=1;
}
return res;
}
void get_d(int u,int fa){
d[u]=d[fa]+1;
maxx=max(d[u],maxx);
for(int v:G[u]){
if(v==fa) continue;
get_d(v,u);
}
}
void dfs(int u,int fa){
if(d[u]==maxx){
dp[u]=1;
return;
}
ll tmp=(ll)G[u].size();
if(u!=1) tmp--;
if(tmp==0) return;
ll q=qpow(tmp,mod-2);
for(int v:G[u]){
if(v==fa) continue;
dfs(v,u);
dp[u]=(dp[u]+dp[v]*q%mod)%mod;
}
dp[u]=(1ll-dp[u]+mod)%mod;
dp[u]=(1ll-qpow(dp[u],tmp)+mod)%mod;
}
int main() {
int n;
scanf("%d",&n);
for(int i=1,u,v;i<n;++i){
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
get_d(1,0);
dfs(1,0);
printf("%lld\n",dp[1]);
return 0;
}
Random Access Iterator的更多相关文章
- Random Access Iterator 徐州网络赛(树形dp)
Random Access Iterator \[ Time Limit: 4000 ms \quad Memory Limit: 262144 kB \] 题意 给出伪代码,问按着伪代码在树上跑,能 ...
- [2019徐州网络赛J题]Random Access Iterator
题目链接 大致题意:从根节点出发,在节点x有son[x]次等概率进入儿子节点,求到达最深深度的概率.son[x]为x节点的儿子节点个数. 又又又又没做出来,心态崩了. 下来看了官方题解后发觉自己大体思 ...
- The Preliminary Contest for ICPC Asia Xuzhou 2019 J Random Access Iterator (树形DP)
每次循环向下寻找孩子时,随机选取一个孩子,设dp[u]为从u出发,不能得出正确答案的概率,则从u出发,走一次的情况下不能得出正确答案的概率是 P = (dp[v1]+dp[v2]+dp[v3]+--d ...
- 解决: org.iq80.leveldb.DBException: IO error: C:\data\trie\000945.sst: Could not create random access file.
以太坊MPT树的持久化层是采用了leveldb数据库,然而在抽取MPT树代码运行过程中,进行get和write操作时却发生了错误: Caused by: org.fusesource.leveldbj ...
- Method for training dynamic random access memory (DRAM) controller timing delays
Timing delays in a double data rate (DDR) dynamic random access memory (DRAM) controller (114, 116) ...
- c++ iterator(迭代器)分类及其使用
前言: 以下的内容为我阅读c++沉思录18,19,20章的笔记以及自己的想法. 正文: 总所周知,c++的stl中提出了iterator的概念,这是C所没有的.在一般的使用中,iterator的行为很 ...
- STL之迭代器(iterator)
STL的中心思想在于:将数据容器和算法分开,彼此独立设计,最后再用一帖粘着剂将它们撮合在一起.没错,这个粘着剂正是迭代器(iterator).迭代器的主要目的是通过遍历来对容器中元素进行相关操作.算法 ...
- STL--迭代器(iterator)
指针与数组 指针与其它数据结构呢?比如说链表? 存储空间是非连续的.不能通过对指向这种数据结构的指针做累加来遍历. 能不能提供一个行为类似指针的类,来对非数组的数据结构进行遍历呢?这样我们就能够以同样 ...
- c++迭代器(iterator)详解
1. 迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型.(1) 每种容器类型都定义了自己的迭代器类型,如vector:vector<int>::iterator iter ...
随机推荐
- Tomcat9卸载与安装
Tomcat9卸载与安装 首先确定环境变量配置正确,按实际的安装路径来设置. 在tomcat9的bin目录下打开命令行窗口 按住shift键不放,点击右键 输入以下命令 在打开的命令行窗口中输入以下命 ...
- windows elasticsearch-head插件安装教程
elasticsearch-head下载地址:https://github.com/mobz/elasticsearch-head 1.git下载 git clone git://github.com ...
- 类似今日头条,头部tab可滑动,下面的内容可跟着滚动,掺杂着vue和require等用法例子
1.在main.js里 /*主模块的入口 结合require一起使用*/ require.config({//require的基础用法 配置一下 paths: { "Zepto" ...
- 理解Production- Ready特性
1.外部配置(externalized configuration) 1).基于环境变量的配置 2).基于YAML的配置 3).默认配置值 2.健康检查(health checks) 1).它是否有一 ...
- spring boot2 运行环境
1.springboot个版本系统需求 spring boot maven jdk 内置tomcat 内置jetty servlet 2.0.x 3.2+ 8或9 8.5(3.1) 9.4(3.1) ...
- XXE--XML外部实体注入漏洞
XXE漏洞原理 XXE漏洞全称XML External Entity Injection 即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部 ...
- POJ 3050:Hopscotch
Hopscotch Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2506 Accepted: 1784 Descrip ...
- centos通过yum安装php
1.添加php的yum软件仓库 sudo rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm 2.安装php相关软件,执行过程中全部选择ye ...
- Iterator迭代器,获取集合元素
* Object next() :返回下一个元素 * boolean hasNext():判断时是否有元素可以获取 public static void main(String[] args ...
- shell字符串大小写转换
1.typeset 有两个选项 -l 代表小写 -u 代表大写. 用法: typeset -u name name='asdasdas' echo $name typeset -l ame am ...