The Preliminary Contest for ICPC Asia Xuzhou 2019 J Random Access Iterator (树形DP)
每次循环向下寻找孩子时,随机选取一个孩子,设dp[u]为从u出发,不能得出正确答案的概率,则从u出发,走一次的情况下不能得出正确答案的概率是 P = (dp[v1]+dp[v2]+dp[v3]+……dp[vk]) / cnt_son[u] ,则从u出发,要走cnt_son[u]次,那么dp[u]=P^cnt_con[u]
dp的意义也可以改成能得出正确答案的概率,下面的式子稍微改改就行了
为了避免除法的精度问题,num/k %mod,它等于 num * ni %mod ,ni等于k在模mod意义下的逆元。
#include <bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
const int maxn=1e6+10;
long long N;
vector<long long> vc[maxn];
long long deep[maxn],dp[maxn],MaxDeep=-1,son[maxn];
void dfs(long long u,long long pre)
{
deep[u]=deep[pre]+1;
MaxDeep=max(MaxDeep,deep[u]);
int size=vc[u].size();
for (int i=0;i<size;i++) {
if (vc[u][i]!=pre) {
son[u]++;
dfs(vc[u][i],u);
}
}
}
long long quick_pow(long long base,long long p)
{
long long ans=1;
while (p) {
if (p&1) {
ans=ans*base%mod;
}
base=base*base%mod;
p>>=1;
}
return ans;
}
void dfs2(long long u,long long pre)
{
if (!son[u]) {
if (deep[u]==MaxDeep) {
dp[u]=0;
}
else {
dp[u]=1;
}
return ;
}
int size=vc[u].size();
long long tmp=0,ni=quick_pow(son[u],mod-2);
for (int i=0;i<size;i++) {
if (vc[u][i]==pre) continue;
dfs2(vc[u][i],u);
tmp=(tmp+(dp[vc[u][i]]*ni)%mod)%mod;
}
dp[u]=quick_pow(tmp,son[u]);
}
int main()
{
scanf("%lld",&N);
long long u,v;
for (int i=1;i<N;i++) {
scanf("%lld%lld",&u,&v);
vc[u].push_back(v);
vc[v].push_back(u);
}
dfs(1,0);
dfs2(1,0);
printf("%lld\n",(1-dp[1]+mod)%mod);
// for (int i=0;i<=N;i++) {
// printf("%lld %lld\n",deep[i],son[i]);
// }
// printf("%lld\n",MaxDeep);
return 0;
}
The Preliminary Contest for ICPC Asia Xuzhou 2019 J Random Access Iterator (树形DP)的更多相关文章
- 计蒜客 41391.query-二维偏序+树状数组(预处理出来满足情况的gcd) (The Preliminary Contest for ICPC Asia Xuzhou 2019 I.) 2019年徐州网络赛)
query Given a permutation pp of length nn, you are asked to answer mm queries, each query can be rep ...
- The Preliminary Contest for ICPC Asia Xuzhou 2019 E XKC's basketball team [单调栈上二分]
也许更好的阅读体验 \(\mathcal{Description}\) 给n个数,与一个数m,求\(a_i\)右边最后一个至少比\(a_i\)大\(m\)的数与这个数之间有多少个数 \(2\leq n ...
- The Preliminary Contest for ICPC Asia Xuzhou 2019
A:Who is better? 题目链接:https://nanti.jisuanke.com/t/41383 题意: 类似于有N个石子,先手第一次不能拿完,每次后手只能拿 1 到 前一次拿的数量* ...
- The Preliminary Contest for ICPC Asia Xuzhou 2019 E. XKC's basketball team
题目链接:https://nanti.jisuanke.com/t/41387 思路:我们需要从后往前维护一个递增的序列. 因为:我们要的是wi + m <= wj,j要取最大,即离i最远的那个 ...
- 计蒜客 41387.XKC's basketball team-线段树(区间查找大于等于x的最靠右的位置) (The Preliminary Contest for ICPC Asia Xuzhou 2019 E.) 2019年徐州网络赛
XKC's basketball team XKC , the captain of the basketball team , is directing a train of nn team mem ...
- The Preliminary Contest for ICPC Asia Xuzhou 2019 【 题目:so easy】{并查集维护一个数的下一个没有被删掉的数} 补题ING
题意:给[1,n],n个数,有两种操作: 1 x,删去x2 x,查询还未被删去的数中大于等于x的最小的数是多少. input: output: 做法:按照并查集的方法压缩路径 代码: #include ...
- G.Colorful String(The Preliminary Contest for ICPC Asia Xuzhou 2019)
https://nanti.jisuanke.com/t/4 #include <bits/stdc++.h> using namespace std; ,; typedef unsign ...
- E.XKC's basketball team(The Preliminary Contest for ICPC Asia Xuzhou 2019)
https://nanti.jisuanke.com/t/41387 解: 离散化+线段树. #define IOS ios_base::sync_with_stdio(0); cin.tie(0); ...
- A.Who is better?(The Preliminary Contest for ICPC Asia Xuzhou 2019)
https://nanti.jisuanke.com/t/41383 解: 斐波那契博弈+中国剩余定理. #include <bits/stdc++.h> using namespace ...
随机推荐
- 测试并整理的 Airpods Pro 刻字可用的最全特殊符号
天气符号 ☉ 文化符号 卍卐 办公室符号 № ℗ ℡ ℀ ℅ ™ © ® ‰ ¶ § 技术符号 ⇧ 打勾符号 ˇ ∨ √ 人的符号 ♀ ♂ ヅ ツ ü 星星符号 ☆ ★ ✽ 箭头符号 ↖ ↗ ↘ ...
- python数据赋值后,修改新数据,原数据如何保证不被修改?
python中对象,赋值后是同一地址,如果是可变对象,对其中一个修改会影响到另一个,如果要生成完全新的对象,应使用deepcopyimport copydata1=copy.deepcopy(data ...
- yolov3 讲解
参考博客:https://blog.csdn.net/litt1e/article/details/88907542
- mongodb多字段去重
单字段去重 db.student.distinct("name"); 多字段去重 db.student.aggregate([{ $group:{ ...
- 是未来还是“有毒”?紧抓球鞋风口的毒APP机遇与危机并存
编辑 | 于斌 出品 | 于见(mpyujian) 新一代的"潮流"之风正在席卷新生代消费市场,从去年开始,国内二手球鞋交易领域突然开始火爆,大有成为新一轮"风口&quo ...
- (转)java垃圾回收一
转自:http://jianfulove.iteye.com/blog/1833768 一切都进入了自动化了,但是对于各种内存溢出,内存泄漏问题的出现,我们还是很有必要学习GC的.地球人都知道,Jav ...
- SDF数据库
一.SDF数据库初探 SDF是一个标准缩略数据库格式.这个数据库包含扩展名为.sdf的文件并且以结构化文件格式进行数据存储.这些SDF文件通常用于在不同数据库应用之间移动数据.它允许一个用户将一个软件 ...
- codeforces 1282 E. The Cake Is a Lie (dfs+构造)
链接:https://codeforces.com/contest/1282/problem/E 题意:给的是一张平面图,是一个n边形,每次可以切一刀,切出一个三角形,最终切成n-2个三角形.题目给出 ...
- 第四篇,JavaScript面试题汇总
JavaScript是一种属于网络的脚本语言,已经被广泛用于web实用开发,常用来为网页添加各种各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚本是通过嵌入在HTML中来实现 ...
- windows10 +ubuntu双系统
1,安装之前的准备: 制作启动盘 确定给ubuntu多少分区并且清理为free状态 确定电脑的开机引导方式,传统方式引号和uefi引导并不一样,因此我们需要根据引导方式选择新系统制作什么样的启动盘 在 ...