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 ...
随机推荐
- 模板c++
#define _CRT_SECURE_NO_WARINGS #include <iostream> using namespace std; int main(void) { retru ...
- 腾讯云函数免费搭建onedrive网盘
目录 腾讯云函数 介绍 真免费? 搭建教程 准备条件 创建云函数 创建触发器 配置SecretId和SecretKey 添加onedriver盘 自定义域名 访问路径处理 总结 搭建期间遇到的问题 想 ...
- Redis学习笔记(三)——数据结构之字符串(String)
一.介绍 String类型,是二进制安全的,存入和获取的数据相同,value最多可以容纳的数据长度是512M,可以存放json数据,图像数据等等. 存储String常用命令: 赋值(set) 取值(g ...
- Redis基础(三)Redis持久化:RDB与AOF
什么是Redis持久化? Redis是键值对的内存数据库,它将数据存储在内存里.客户端发送命令到服务器,再由服务器到内存里查找数据. 一旦Redis服务器进程退出,存储在内存里的数据就会丢失. 为了解 ...
- B. Nauuo and Circle 解析(思維、DP)
Codeforce 1172 B. Nauuo and Circle 解析(思維.DP) 今天我們來看看CF1172B 題目連結 題目 略,請直接看原題 前言 第一個該觀察的事情一直想不到,看了解答也 ...
- 【问题记录】—.NetCore 编译问题
最近在协助验证Jenkins自动编译发布时,对一些.Net Core编译问题进行了解决:特记录一下 一.编译生成netcoreapp目录问题 问题现象 .net core项目编译输出目录总是包含在[n ...
- 正式班D16
2020.10.27星期二 正式班D16 目录 9.9 字符处理命令 9.9.1 sort排序 9.9.2 uniq去重 9.9.3 cut处理规律文本 9.9.4 tr替换 9.9.5 wc统计 9 ...
- 关于ansible命令的执行过程
首先说明一下.每一个模块.都是有相应的.py文件的,可以通过rpm -ql ansible看到 要观察模块执行过程,可以在ansible命令执行时加上-v或-vvv,或者-vvvv看得更加详细 ans ...
- CodeForces 1408I Bitwise Magic
题意 给定三个整数 \(n,k,c\) 和一个长度为 \(n\) 的序列 \(a\),保证 \(a_i\) 互不相同.可以操作 \(k\) 次,每次随机选择一个 \(a_i\) 变成 \(a_i-1\ ...
- Luogu P4172 [WC2006]水管局长
题意 给定一个 \(n\) 个点 \(m\) 条边的图和 \(q\) 次操作,每次操作分为以下两种: 1 u v:查询 \(u\) 到 \(v\) 的一条路径使得边权最大的边的权值最小. 2 u v: ...