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的更多相关文章

  1. 2020CCPC长春F. Strange Memory

    题目大意 一棵以 \(1\) 为根的 \(n(2\leq n\leq 10^5)\) 的树,每个节点 \(i\) 有权值 \(a_{i}(1\leq a_{i}\leq 10^6)\) ,求 \(\s ...

  2. hdu 4764 && 2013长春网赛题解

    一个组合游戏题. 解答: 从后面往前面推,首先n-1是必胜位,然后前面的k位是必败位,如此循环下去.所以题目就容易了! 代码: #include<cstdio> using namespa ...

  3. 【2012长春区域赛】部分题解 hdu4420—4430

    这场比赛特点在于两个简单题太坑,严重影响了心情..导致最后只做出两题....当然也反映出心理素质的重要性 1002: 题意:一个矩阵b[n][n]通过数组 a[n]由以下规则构成,现在已知b[n][n ...

  4. 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}, ...

  5. Vulnhub靶场题解

    Vulnhub简介 Vulnhub是一个提供各种漏洞环境的靶场平台,供安全爱好者学习渗透使用,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者VirtualBox运行 ...

  6. HDU 5527 Too Rich ( 15长春区域赛 A 、可贪心的凑硬币问题 )

    题目链接 题意 : 给出一些固定面值的硬币的数量.再给你一个总金额.问你最多能用多少硬币来刚好凑够这个金额.硬币数量和总金额都很大   分析 : 长春赛区的金牌题目 一开始认为除了做类似背包DP那样子 ...

  7. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  8. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  9. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

随机推荐

  1. phpstorm10.0.3 下载与激活

    phpstorm10.0.3 百度网盘下载   提取码: kqvc 激活服务器: http://jetbrains.tencent.click/ (2016-09-19 可用) http://owo. ...

  2. 如何快速在vscode配置C/C++环境

    目录 1.卸载重装vscode 2.下载vscode 3.下载MinGW 4.配置环境变量 5.配置c/c++环境 6.超完整的配置文件 7.常用扩展推荐 8.注意 9.后记 相信许多刚开始使用vsc ...

  3. 2020主流国产BI产品对比

    国产BI软件由于具备较强的本土特性,可以很好地适应国内用户的使用习惯,越来越多被国内用户使用.目前国内BI产品很多,可谓百家争鸣,如何从众多的BI产品中选择适合自己的呢?这里我们对比一下目前国内主流的 ...

  4. BCE和CE交叉熵损失函数的区别

    首先需要说明的是PyTorch里面的BCELoss和CrossEntropyLoss都是交叉熵,数学本质上是没有区别的,区别在于应用中的细节. BCE适用于0/1二分类,计算公式就是 " - ...

  5. filezilla pureftpd 读取目录列表失败

    放行   21, 39000 - 40000端口

  6. 《Head First 设计模式》:迭代器模式

    正文 一.定义 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 要点: 迭代器模式把在元素之间游走的责任交给迭代器,而不是聚合对象.这样简化了聚合的接口和实现,也让责 ...

  7. APIO2008免费道路

    题目大意 给定一张n个点m条边的图,图上有两种边,求保证有k条第一种边的情况下的最小生成树 传送门 题解 考虑最小生成树kruskal算法 先找到不含限制的最小生成树,然后就可以知道哪些第一种边是必选 ...

  8. python使用zlib库压缩图片,使用ffmpeg压缩视频

    python压缩图片.视频 图片压缩使用zlib库 视频压缩使用工具ffmpeg # ffmpeg -i 1.mp4 -r 10 -pix_fmt yuv420p -vcodec libx264 -p ...

  9. NOIP2018 填坑记

    Oct,22ed,2018 DAY -18 又是颓废的一天呢 我好菜啊,一个圆方树弄了一整天(点双怎么那么毒瘤).(铁人两项怎么那么多点) Oct,23rd,2018 DAY -17 又双叒叕颓了一天 ...

  10. DP百题练索引

    就是一篇还在咕的文章 DP百题练(一) DP百题练(二) DP百题练(三)