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. ▶ 0001 No application 'E:\www\go\blog' found in your GOPATH

    go mod 配置 beego 首先cmd bee new blog go mod init 然后复制到任意目录 bee run 就会报错, 要退出该目录,进入上级目录 bee run blog 才行

  2. rabbitmq与erlang版本

    来源自https://www.rabbitmq.com/which-erlang.html erlang安装包下载地址 https://packages.erlang-solutions.com/er ...

  3. 尝试从零开始构建我的商城 (一) :使用Abp vNext快速一个简单的商城项目

    尝试从零开始构建我的商城 (一) :使用Abp vNext快速搭建一个简单的项目 前言 GitHub地址 https://github.com/yingpanwang/MyShop 此文目的 本文将尝 ...

  4. Vulkan Driver for VC4(Raspberry Pi 3b) base on mesa

    这是一篇关于在raspberry Pi 3b上移植实现vulkan 驱动的文章. 经过一段时间的代码搬运,终于实现了零的突破,可以在树莓派3B上运行Vulkan triangle/texture.当然 ...

  5. Luogu P2173 [ZJOI2012]网络

    题意 写的比较清楚,我就不解释了. \(\texttt{Data Range:}n\leq 10^4,m\leq 10^5,c\leq 10,k\leq 10^5\) 题解 注意到 \(c\) 的范围 ...

  6. 新版本 swagger 组件中 Servers 的 坑

    新版本 Swashbuckle swagger 组件中 Servers 的 坑 Intro 上周做了公司的项目升级,从 2.2 更新到 3.1, swagger 直接更新到了最新,swagger 用的 ...

  7. OpenCV计算机视觉学习(10)——图像变换(傅里叶变换,高通滤波,低通滤波)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 在数 ...

  8. Js中常见的内存泄漏场景

    常见的内存泄漏场景 内存泄漏Memory Leak是指程序中已动态分配的堆内存由于疏忽或错误等原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果.内存泄漏并非指内 ...

  9. CF1108E2 Array and Segments (Hard version)

    线段树 对于$Easy$ $version$可以枚举极大值和极小值的位置,然后判断即可 但对于$Hard$ $version$明显暴力同时枚举极大值和极小值会超时 那么,考虑只枚举极小值 对于数轴上每 ...

  10. Git--gitLab远程仓库分支代码回退的两种方案

    事由:作为仓库的master,一时老眼昏花,把同事说的不合并看成了合并,直接合并了. 解决方法: 一.粗鲁的代码回退--直接在远程仓库合并 1. 在gitLab远程仓库中,基于想回退的代码的节点(co ...