2020CCPC长春题解 I - Kawaii Courier
2020CCPC长春题解 I - Kawaii Courier
题目大意:给一个树,让你求每个节点走到根节点的期望的d*x^d,d为走过的边个数。走法是每次随机等概率走到相邻的点。
题目分析: 相对于经典的距离d的期望,这里要求的是d*x^d的期望。
我们设F(a)=a *x^a
考察F(a+b)与F(a) F(b)的关系,很遗憾,没法直接表示。
引入,辅助函数G(a)=x^a
那么F(a+b)=F(a)*G(b)+F(b)*G(a)
而G(a+b)=G(a)*G(b)
那么分别用两个DFS求出F,G。再用一个DFS得到答案即可。复杂度O(nlogn) n是dfs复杂度,log是逆元复杂度。
代码如下:

1 #include <bits/stdc++.h>
2 using namespace std;
3 const long long mod=1e9+7;
4 const long long maxn=1e5+10;
5 long long b[maxn],c[maxn],n,k,px,qx,nx,u,v,ans;
6 vector<long long> a[2*maxn];
7 long long ksm(long long x,long long t)
8 {
9 long long ans=1;
10 long long res=x;
11 while (t)
12 {
13 if (t&1) ans=ans*res%mod;
14 res=res*res%mod;
15 t=t>>1;
16 }
17 return ans;
18 }
19 long long _inv(long long x)
20 {
21 x=(x%mod+mod)%mod;
22 return ksm(x,mod-2);
23 }
24 void init()
25 {
26 scanf("%lld%lld%lld%lld",&n,&k,&px,&qx);
27 nx=(px*ksm(qx,mod-2))%mod;
28 for (int i=1;i<n;i++)
29 {
30 scanf("%lld%lld",&u,&v);
31 a[u].push_back(v);
32 a[v].push_back(u);
33 }
34 }
35 void dfs1(long long x,long long fa)
36 {
37 long long sum=0;
38 for (int i=0;i<a[x].size();i++)
39 {
40 if (a[x][i]==fa) continue;
41 dfs1(a[x][i],x);
42 sum=(sum+b[a[x][i]])%mod;
43 }
44 b[x]=(nx*_inv(a[x].size()-nx*sum%mod))%mod;
45 }
46 void dfs2(long long x,long long fa)
47 {
48 long long sum1=0,sum2=0;
49 for (int i=0;i<a[x].size();i++)
50 {
51 if (a[x][i]==fa) continue;
52 dfs2(a[x][i],x);
53 sum1=(sum1+b[a[x][i]])%mod;
54 sum2=(sum2+c[a[x][i]])%mod;
55 }
56 c[x]=((nx*b[x]%mod)*(sum1+sum2)%mod+nx)%mod;
57 c[x]=c[x]*_inv(a[x].size()-nx*sum1%mod)%mod;
58 }
59 void get_ans(long long x,long long fa,long long f,long long g)
60 {
61 if (x!=k) ans=ans^(x*((f*c[x]+g*b[x])%mod)%mod);
62 for (int i=0;i<a[x].size();i++)
63 {
64 if (a[x][i]==fa) continue;
65 get_ans(a[x][i],x,f*b[x]%mod,(f*c[x]+g*b[x])%mod);
66 }
67 }
68 int main()
69 {
70 init();
71 dfs1(k,k);
72 dfs2(k,k);
73 b[k]=1;
74 c[k]=0;
75 ans=0;
76 get_ans(k,k,1,0);
77 printf("%lld\n",ans);
78 return 0;
79 }
of I
2020CCPC长春题解 I - Kawaii Courier的更多相关文章
- 2020CCPC长春F. Strange Memory
题目大意 一棵以 \(1\) 为根的 \(n(2\leq n\leq 10^5)\) 的树,每个节点 \(i\) 有权值 \(a_{i}(1\leq a_{i}\leq 10^6)\) ,求 \(\s ...
- hdu 4764 && 2013长春网赛题解
一个组合游戏题. 解答: 从后面往前面推,首先n-1是必胜位,然后前面的k位是必败位,如此循环下去.所以题目就容易了! 代码: #include<cstdio> using namespa ...
- 【2012长春区域赛】部分题解 hdu4420—4430
这场比赛特点在于两个简单题太坑,严重影响了心情..导致最后只做出两题....当然也反映出心理素质的重要性 1002: 题意:一个矩阵b[n][n]通过数组 a[n]由以下规则构成,现在已知b[n][n ...
- 2015ACM-ICPC长春E题(hdu5531)题解
一.题意 No response.T_T 二.思路 分$n$为奇数或者偶数讨论. 如果$n$是奇数,列出不等式组:$r_1+r_2=d_{1},r_2+r_3=d_{2},r_3+r_4=d_{3}, ...
- Vulnhub靶场题解
Vulnhub简介 Vulnhub是一个提供各种漏洞环境的靶场平台,供安全爱好者学习渗透使用,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者VirtualBox运行 ...
- HDU 5527 Too Rich ( 15长春区域赛 A 、可贪心的凑硬币问题 )
题目链接 题意 : 给出一些固定面值的硬币的数量.再给你一个总金额.问你最多能用多少硬币来刚好凑够这个金额.硬币数量和总金额都很大 分析 : 长春赛区的金牌题目 一开始认为除了做类似背包DP那样子 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
随机推荐
- linux(centos8):centos8.1安装(详细过程/图解)(vmware fusion/CentOS-8.1.1911-x86_64)
一,centos是什么? CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一, 它是来自于Red Hat En ...
- Groovy中如何向已有的类添加新方法
Groovy 中有多种途径实现向原有类添加方法,具体有如下几种: MOP(meta object protocol) -- 详见 ExpandoMetaClass 扩展方法 -- GDK采用的此方法 ...
- 【应用服务 App Service】NodeJS +Egg 发布到App Service时遇见 [ERR_SYSTEM_ERROR]: A system error occurred:uv_os_get_passwd returned ENOENT(no such file or directory)
问题情形 本地NodeJS应用使用Egg脚手架构建,本地运行测试完全没有问题,发布后App Service后不能运行.通过登录到kudu后(https://<your web site>. ...
- Linux配置阿里epl源
去阿里云 有源仓库 阿里云镜像官方站点 https://developer.aliyun.com/mirror/ 先备份本机上的源 mv /etc/yum.repos.d/CentOS-Base.re ...
- SpringMVC异常的处理机制
SpringMVC异常的处理机制 处理流程图 其本质还是把异常交给SpringMVC框架来处理 系统的dao.service.controller出现异常都通过throws Exception向上抛出 ...
- git 报错 error: failed to push some refs to .....
git push 代码的时候报错,报错如下: 这种报错是因为远程仓库的代码和本地仓库的代码不同步,对本地的代码进行一次拉取,再 git push 就可以解决了 通过如下命令进行代码合并 git pul ...
- JS变量作用域与解构赋值
用var变量是有作用域的 变量在函数内部声明时,那么该变量只属于整个函数体,函数外不可调用 当两个不同的函数里,使用了用一个相同的变量名,二者不互相影响,相互独立 遇到嵌套函数时,外部函数不可调用内部 ...
- 常用手册或官网的url
1.mysql--> https://www.mysql.com/ 2.菜鸟教程--> http://www.runoob.com 3.maven官网--> https://mave ...
- Luban图片压缩
导入依赖: implementation 'top.zibin:Luban:1.1.3' public class MainActivity extends AppCompatActivity { p ...
- java数据结构-05双向链表
一.双向链式存储: ①简述:要是节点中包含两个指针部分,一个指向前驱元,一个指向后继元,Java中LinkedList集合类的实现就是双向链表 (以下图片为网络收集,侵删) ②特点:数据是非连续的,链 ...