P3412 仓鼠找sugar II 题解

STM32移植LVGL(LittleVGL) **STM32移植LVGL(LittleVGL)** 阅读详情

P3412 仓鼠找sugar II

P3412 仓鼠找sugar II

根据期望的线性性质我们考虑对于每一条边进行计算贡献。

我们可以考虑先算方案数再除以总的点对。

根据期望的定义本质上就是平均数,那么对于一条边 u → v u \to v u→v 的贡献次数就是 ( n − s i z ( u ) ) × s i z ( u ) (n - siz(u)) \times siz(u) (n−siz(u))×siz(u)。

我们考虑一条边有两种情况:

  • 向上
  • 向下

我们钦定点 u u u 表示 f a ( u ) → u fa(u) \to u fa(u)→u 的边。

  • 设 u p ( u ) up(u) up(u) 表示这条边从下走到上 u → f a ( u ) u \to fa(u) u→fa(u)。
  • 设 d n ( u ) dn(u) dn(u) 表示这条边从下走到上 f a ( u ) → u fa(u) \to u fa(u)→u。

u p ( u ) up(u) up(u) 一共有两种情况:

  • u → v → u → f a ( u ) u \to v \to u \to fa(u) u→v→u→fa(u)
  • u → f a ( u ) u \to fa(u) u→fa(u)。

u p ( u ) = 1 d e g ( u ) + ∑ v ∈ s o n ( u ) u p ( v ) + u p ( u ) + 1 d e g ( u ) = d e g ( u ) + ∑ v ∈ s o n ( u ) u p ( v ) \begin{aligned} up( u) &= \frac{1}{deg(u)} + \sum_{v \in son(u)} \frac{up(v) + up(u) + 1}{deg(u)}\\ &= deg(u) + \sum_{v \in son(u)} up(v) \end{aligned} up(u)​=deg(u)1​+v∈son(u)∑​deg(u)up(v)+up(u)+1​=deg(u)+v∈son(u)∑​up(v)​

d n ( u ) dn(u) dn(u) 一共有 3 3 3 种情况:

  • f a ( u ) → u fa(u) \to u fa(u)→u
  • f a ( u ) → u ′ → f a ( u ) → u fa(u) \to u' \to fa(u) \to u fa(u)→u′→fa(u)→u
  • f a ( u ) → f a ( f a ( u ) ) → u fa(u) \to fa(fa(u)) \to u fa(u)→fa(fa(u))→u

设 s u m ( u ) = ∑ v ∈ s o n ( u ) u p ( v ) sum(u) = \sum_{v \in son(u)} up(v) sum(u)=∑v∈son(u)​up(v)。
d n ( u ) = 1 d e g ( f a ( u ) ) + ∑ v ∈ s o n ( f a ( u ) ) , v ≠ u u p ( v ) + d n ( u ) + 1 d e g ( f a ( u ) ) + d n ( f a ( u ) ) + d n ( u ) + 1 d e g ( f a ( u ) ) = d e g ( u ) + s u m ( f a ( u ) ) − u p ( u ) + d n ( f a ( u ) ) \begin{aligned} dn(u) &= \frac{1}{deg(fa(u))} + \sum_{v \in son(fa(u)), v \ne u} \frac{up(v) + dn(u) + 1}{deg(fa(u))} + \frac{dn(fa(u)) + dn(u) + 1}{deg(fa(u))} \\ &= deg(u) + sum(fa(u)) - up(u) + dn(fa(u)) \end{aligned} dn(u)​=deg(fa(u))1​+v∈son(fa(u)),v​=u∑​deg(fa(u))up(v)+dn(u)+1​+deg(fa(u))dn(fa(u))+dn(u)+1​=deg(u)+sum(fa(u))−up(u)+dn(fa(u))​

之后容易想到一条边的贡献就是向上和向下之和 a n s = s i z ( u ) × ( n − s i z ( u ) ) × ( u p ( u ) + d n ( u ) ) ans = siz(u) \times (n - siz(u)) \times (up(u) + dn(u)) ans=siz(u)×(n−siz(u))×(up(u)+dn(u))。

之后再 ÷ n 2 \div n^2 ÷n2 即可。

#include <bits/stdc++.h>
using namespace std;

//#define Fread
//#define Getmod

#ifdef Fread
char buf[1 << 21], *iS, *iT;
#define gc() (iS == iT ? (iT = (iS = buf) + fread (buf, 1, 1 << 21, stdin), (iS == iT ? EOF : *iS ++)) : *iS ++)
#define getchar gc
#endif // Fread

template <typename T>
void r1(T &x) {
	x = 0;
	char c(getchar());
	int f(1);
	for(; c < '0' || c > '9'; c = getchar()) if(c == '-') f = -1;
	for(; '0' <= c && c <= '9';c = getchar()) x = (x * 10) + (c ^ 48);
	x *= f;
}

template <typename T,typename... Args> inline void r1(T& t, Args&... args) {
    r1(t);  r1(args...);
}

//#define int long long
const int maxn = 2e5 + 5;
const int maxm = maxn << 1;
const int mod = 998244353;

int head[maxn], cnt;
struct Edge {
    int to, next;
}edg[maxn << 1];
void add(int u,int v) {
    edg[++ cnt] = (Edge) {v, head[u]}, head[u] = cnt;
}

int n;
int up[maxn], dn[maxn], sum[maxn], deg[maxn], siz[maxn];

void dfs1(int p,int pre) {
    siz[p] = 1;
    for(int i = head[p];i;i = edg[i].next) {
        int v = edg[i].to;
        ++ deg[p];
        if(v == pre) continue;
        dfs1(v, p);
        sum[p] = (sum[p] + up[v]) % mod;
        siz[p] += siz[v];
    }
    up[p] = (deg[p] + sum[p]) % mod;
}

int ksm(int x,int mi) {
    int res(1);
    while(mi) {
        if(mi & 1) res = 1ll * res * x % mod;
        mi >>= 1;
        x = 1ll * x * x % mod;
    }
    return res;
}
int ans(0);
void dfs2(int p,int pre) {
    if(p != 1) dn[p] = (deg[pre] + sum[pre] - up[p] + dn[pre] + mod) % mod;
    ans += 1ll * siz[p] * (n - siz[p]) % mod * (up[p] + dn[p]) % mod;
    ans %= mod;
    for(int i = head[p];i;i = edg[i].next){
        int to = edg[i].to; if(to == pre) continue;
        dfs2(to, p);
    }
}

signed main() {
//    freopen("S.in", "r", stdin);
//    freopen("S.out", "w", stdout);
    int i, j;
    r1(n);
    for(i = 1; i < n; ++ i) {
        int u, v;
        r1(u, v), add(u, v), add(v, u);
    }
    dfs1(1, 0);
    dfs2(1, 0);
//    printf("ans = %d\n", ans);
    ans = 1ll * ans * ksm(1ll * n * n % mod, mod - 2) % mod;
    printf("%d\n", ans);
	return 0;
}
图生文【学习中】 图生文:提供图像,把图像对应的信息用文本描述出来 阅读详情

相关推荐

英伟达笔试1

本文摘要: 使用NAND2门设计4位奇偶校验发生器,通过15个NAND2门实现4输入异或功能,分三级结构完成奇校验计算。 时序分析公式总结: 建立时间约束:T_cq + T_comb(max) + T_setup + T_skew ≤ T_clk 保持时间约束:T_cq + T_comb(min) + T_skew ≥ T_hold 提供了两段路径的具体时序检查公式和建立违规修复方法 分析32位粘滞累积寄存器Verilog代码: 功能:记录输入数据中出现过的所有1位 每个bit独立实现,复位清零,有效输入时

soulermax的博客 166

洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

&#13; 洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 仓鼠找sugar II 好像只有洛谷有诶。。。 日常吐槽 这个期望题开发新思维方式还是比较好的。。。 毕竟还是很难想的。。。鸣谢\(fdfDarkfire\)教我做...

eternal风度 272

LIN协议栈 AUTOSAR架构下 状态管理

LIN State Manager 通过对这些状态的管理和转换,实现了对 LIN 总线通信状态的精确控制,以满足汽车电子系统中不同场景的需求。

汽车电子从业者,电子爱好者。 2052

洛谷·仓鼠找sugar

洛谷P3398 仓鼠找sugar 树剖+线段树解法,树剖LCA解法,单纯的LCA解法

樱狸✨愿携清风归来处 613

KEIL5编译报错L6200E:__stdout重定义问题分析与解决

本文深入分析KEIL5编译报错L6200E中__stdout重定义问题的根源,指出因未完整定义__stderr导致与标准库stdio_streams.o冲突。提供完整重定义标准流、启用MicroLIB库等解决方案,帮助开发者彻底解决Symbol multiply defined错误,提升嵌入式开发效率。

uran的专栏 955

halcon 检测直线

图中后三个对象既是检测出的图像;

qq_59062726的博客 666

The 2023 ICPC Asia Hangzhou Regional Contest (H. Sugar Sweet II(基环树,期望))

假如1事件要发生,则必须2事件要发生,2事件要发生,则必须3事件要发生,因为3事件是必然发生事件(a[1]=5>a[3]=3),所以1事件可能发生,发生的概率是3先发生,2再发生,1再发生。为避免将本该概率为0的事件设为长度值,我们直接设定必然事件i的答案值为1。2.如果第bi小朋友的最大糖果数量<=i当前的糖果数量,a[b[i]] + w[b[i]] <= a[i],说明i事件不可能发生,概率为0。假如1事件要发生,则必须2事件发生,而2事件不可能发生,所以1事件也不可能发生,概率为0。

2201_75461013的博客 413

ROS——无人机ROS仿真包 rotors_simulator 编译教程

文章目录 安装wstool sudo apt install python3-wstool 创建ROS工程 $ mkdir -p ~/UAV/src $ cd ~/UAV/src $ catkin_init_workspace # initialize your catkin workspace $ wstool init 下载源码 git clone git@github.com:ethz-asl/rotors_simulator.git 源码链接: https://github.com/eth

漫长IT路 5863

洛谷 P3412 仓鼠找sugar II 题解

题目传送门 题目大意: 给一棵树,随机两个点 A,BA,BA,B,问从 AAA 走到 BBB 的期望步数是多少。 题解 概率 dpdpdp 做多了逐渐熟练起来了qwq?? 设想将点 111 固定为点 BBB,然后以 111 为根,那么点 AAA 就只需要考虑走到根节点的期望步数,换言之,只有往父亲方向走才是有用的。 那么就能得到这样的递推方程:设 f[i]f[i]f[i] 表示点 iii 走到它的...

a_forever_dream的博客 234

微信公众平台 - 微信内置浏览器 WeixinJSBridge.invoke(‘xxx‘) API 报错:system:access_denied(常见于微信支付、分享朋友圈/转发好友等功能)解决方案

微信支付提示System:access_denied,调用微信支付返回:system:access_denied为什么,安卓版微信支付偶尔出现system:access_denied,微信公众号开发分享出现system:access_denied,system:access_denied如何解决?微信WeixinJSBridge.invoke(‘xxx‘)API调用后出现报错,微信内部H5WeixinJSBridge.invokesystem:access_denied,使用微信jssdk时报ac

🏆 前端领域优质创作者 5145

AI智算-K8s如何利用IB RDMA网络加速大模型分布式训练

在AI人工智能领域,大模型的微调是提升性能不可或缺的一环。通过结合InfiniBand RDMA网络的高速互联、Kubernetes的云原生容器化部署,以及智能算力调度平台,可以打造一个高效、灵活且可扩展的分布式训练环境。

Kason_iWiki 816

【luogu P3412】仓鼠找sugar II

题目 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n。地下洞穴是一个树形结构。这一天小仓鼠打算从从他的卧室(a,是任意的)他的基友卧室(b,还是任意的)。(注意,a有可能等于b。)然而小仓鼠学OI学傻了,不知道怎么怎么样才能最短的走到目的地。于是他只能随便乱走。当他在每一个节点时,等概率到这个点的母亲或者所有孩子节点(例如这个节点有一个母亲节点和两个子节点,那么下一步走到这3个节点的概率都是1/3)。一但走到了他基友的卧室,就会停下。 现在小仓鼠希望知道,他走

Brute♂force 364

跳蛛优化算法(JSOA)详解:从生物启发到算法实现

摘要: 跳蛛优化算法(JSOA)是一种受跳蛛狩猎行为启发的元启发式优化算法,通过模拟跳蛛的搜索猎物、迫害行为、跳跃捕食和信息素通信四种策略实现高效寻优。算法将跳蛛个体位置映射为候选解,利用物理学模型(匀加速运动、抛射轨迹)和随机策略(柯西分布、信息素机制)平衡全局探索与局部开发。JSOA具有参数少、收敛快的特点,适用于函数优化、路径规划等领域,其生物行为与数学抽象的对应关系(如表1所示)是其核心创新点。

qq_42212808的博客 124

[luogu3412]仓鼠找sugar II

题面在这里 题意 给定一棵树(\(n\le10^5\)),仓鼠随机选择起点和终点,之后从起点开始随机游走,每次都会等概率地选择和其相邻的任一道路,直到到达终点,求到达终点时步数的期望 sol 因为这一道题中的起点和终点都是不确定的,不好统计 于是先考虑终点固定的情况,此时我们把终点当作整棵树的\(root\),在\(O(n)\)算法之前的陈述中,直接以根节点代指终点,不做说明 那么设\(f[x]\...

weixin_30878361的博客 131

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

P3412 仓鼠找sugar II(树上期望,换根思想算贡献)

题意:给定一颗树,取树上任意两点为起点和终点(这两点可以相同),求从起点走到终点的概率。 分析与总结:明显这道题与换根有密切的联系,先考虑固定1号结点为根节点,套路考虑维护一个每个结点向根走近一步的期望步数f[]。考虑一个结点 x如下图所示,它的儿子是s1,s2,父亲节点是fa 考虑返祖边,显然考虑返祖边f[x]=1+(d[x]−1)+sigma(f[son])f[x]=1+(d[x]-1)+sigma(f[son])f[x]=1+(d[x]−1)+sigma(f[son]) 其实这个式子可以退出f[x]

qq_43543086的博客 203

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【DP】仓鼠找sugar II

题目 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n。地下洞穴是一个树形结构。这一天小仓鼠打算从从他的卧室(a,是任意的)他的基友卧室(b,还是任意的)。(注意,a有可能等于b。)然而小仓鼠学OI学傻了,不知道怎么怎么样才能最短的走到目的地。于是他只能随便乱走。当他在每一个节点时,等概率到这个点的母亲或者所有孩子节点(例如这个节点有一个母亲节点和两个子节点,那么下一步走到这3个节点的概率都是1/3)。一但走到了他基友的卧室,就会停下。 现在小仓鼠希望知道,他走

Brute♂force 369

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

仓鼠找sugar II

题目描述小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n。地下洞穴是一个树形结构。这一天小仓鼠打算从从他的卧室(a,是任意的)他的基友卧室(b,还是任意的)。(注意,a有可能等于b。)然而小仓鼠学OI学傻了,不知道怎么怎么样才能最短的走到目的地。于是他只能随便乱走。当他在每一个节点时,等概率到这个点的母亲或者所有孩子节点(例如这个节点有一个母亲节点和两个子节点,那

wang_sj的博客 798

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 252

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 322

把 KV Cache 压到 FP4:BitDecoding-FP4 的算法-系统协同设计复盘

长上下文推理卡在KV Cache的显存与带宽上,而现有FP4方案要么精度崩、要么速度废。这篇文章复盘BitDecoding-FP4如何用三个算法补丁加一个系统重构,在B300上把服务吞吐提升2.4–3.0倍,精度几乎不掉。

helloagent的博客 301

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 596

优选算法:分治-归并排序

交易逆序对的总数

Wangshijie1015的博客 136

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 23

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 751

408 算法 06|堆与 Top-K:最小的 10 个数,到底该用数组还是堆

2022(42) 找 100 万个数里最小的 10 个,官方给了"10 元素有序数组"和"大根堆"两种答案。我把两种都实现并数了比较次数:k=10 时两者几乎打平,k=10000 时堆少 111 倍。另附 2021(42) 计数排序的比较次数与稳定性实测。

m0_56226131的博客 358

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 172
上一篇: [HNOI2013]游走 题解
下一篇: [PKUWC2018]Minimax 题解
sharp_legendgod
博客等级 码龄7年 8粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值