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 ...
随机推荐
- Spring开发环境搭建(Eclipse)
开发环境搭建,主要包含2部分: Java安装 Eclipse安装 为易于学习,我们只安装这2个部分,对于一般开发学习也足够了.如果你有其他要安装的,酌情添加. Java安装 我们使用Java8: 下载 ...
- NIO前奏之Path、Files、AsynchronousFileChannel
NIO前奏之Path.Files.AsynchronousFileChannel Java 1.4加入了nio包,Java 1.7 加入了真正的AIO(异步IO),AsynchronousFile ...
- UVA - 11093 Just Finish it up(环形跑道)(模拟)
题意:环形跑道上有n(n <= 100000)个加油站,编号为1~n.第i个加油站可以加油pi加仑.从加油站i开到下一站需要qi加仑汽油.你可以选择一个加油站作为起点,起始油箱为空(但可以立即加 ...
- gdal库的学习和使用
1.windows下的编译 1.1.解压后打开nmake.opt,设置GDAL_HOME 1.2.进入vs的command promot,进入正常的那个即可,64位的没试过,可以参考gdal官网 1. ...
- 十四、CI框架之数据库以参数形式插入操作
一.代码如下: 二.使用浏览器打开 三.我们查看数据库,被成功插入数据 不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:382477247)哦,谢谢.
- HZNU-ACM寒假集训Day4小结 最短路
最短路 1.Floy 复杂度O(N3) 适用于任何图(不存在负环) 模板 --kuangbin #include<iostream> #include<cstdio> #in ...
- 标准JAVA工程结构
- 吴裕雄--天生自然 JAVASCRIPT开发学习:while 循环
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 2020/1/30 PHP代码审计之文件上传漏洞
0x00 漏洞简介 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力.这种攻击是最为直接和有效的,"文件上传"本身是没有问题,有问题的是 ...
- 调用约定__stdcall / __cdecl
__cdecl与__stdcall这两种调用约定之间的主要差别在于由谁来执行对参数的清理工作. 如果是__cdecl,那么主调函数将负责执行清理工作,如果是__stdcall那被调函数将负责执行清理. ...