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

标签:题解
阅读体验:https://zybuluo.com/Junlier/note/1327573
原题链接:洛谷P3412 仓鼠找sugar II
好像只有洛谷有诶。。。

日常吐槽

这个期望题开发新思维方式还是比较好的。。。
毕竟还是很难想的。。。鸣谢\(fdfDarkfire\)教我做这个题!

题解来了

很容易发现答案就是\(\dfrac{\sum_{i=1}^{n}\sum_{i=1}^{n}dis[i][j]}{n^2}\% MOD\)是吧
但是不会在短时间内算分子部分啊。。。
但是我们可以发现:如果可以固定住终点,那么会很容易算
所以我们先钦定终点在\(1\),然后考虑某种方法来启发计算所有点为终点的情况

终点在\(1\)

不妨把\(1\)作为根
本来一个\(DFS\)可以搞定,但是对正解毫无启发,所以再想一下
我们设\(f[now]\)表示从\(now\)跳到\(fa[now]\)的期望步数
那么有(这个自己思考一下就行了)(\(qw\)是儿子,\(d\)是度数)\[f[now]=1+\frac{1}{d[now]}×\sum(f[qw]+f[now])\]草稿纸上化简一下会得到\(f[now]=d[now]+\sum f[qw]\)
哇,这不是很美丽!得到\(f[now]=\sum d[x]\)(\(x\)在\(now\)的子树内)
突然发现\(f\)数组只和子树度数和有关,嘿嘿、、、
这样也可以很方便地统计答案是吧:\(Ans=siz[now]×f[now]\)
说一下为什么,\(now\)往\(fa[now]\)的边只会被\(now\)的子树中节点去用\(f[x]\)走是吧,而\(f[now]\)全统计到了\(f[x]\),所以直接乘

那么我们发现,固定一个点为终点时答案只和当前点为根时的$\sum $子树大小×子树度数和 有关

拓展到终点随机

上面那个结论很重要
我们现在对每个点进行考虑,是不是它有很多个方向出去,那些方向都有可能有终点
我们分别计算那些终点是在哪一个方向

  1. 肯定还是先以\(1\)为根把上面所需的所有东西处理出来
  2. 枚举每个点枚举边考虑根的方向
  3. 如果根在树中的\(1\)的方向,就是\(fa[now]\)方向,肯定有\(Ans+=siz[now]*f[now]*(n-siz[now])%MOD\)
    意思是对于根在\(fa[now]\)方向有\((n-siz[now])\)种位置,而每种位置此时贡献都是\(siz[now]*f[now]\)(上面说了的)
  4. 如果根在树中的某个儿子方向,就是\(qw\)方向,肯定有\((n-siz[qw])*(tot-f[qw])*siz[qw])\),含义的话根据\(fa[now]\)方向的情况自己想一下吧

PS:上面这一段有不理解可以根据代码看
这样我们就统计完了总表达式的分子部分,乘个逆元就解决了。。。

#include<bits/stdc++.h>
#define il inline
#define rg register
#define ldb double
#define lst long long
#define rgt register int
#define N 100050
#define qw ljl[i].to
#define MOD 998244353
using namespace std;
const int Inf=1e9;
il int MAX(rgt x,rgt y){return x>y?x:y;}
il int MIN(rgt x,rgt y){return x<y?x:y;}
il int read()
{int s=0,m=0;char ch=getchar();while(!isdigit(ch)){if(ch=='-')m=1;ch=getchar();}while( isdigit(ch))s=(s<<3)+(s<<1)+(ch^48),ch=getchar();return m?-s:s;
}int n;lst Ans;
int hd[N],cnt,tot;
int f[N],siz[N],fa[N],d[N];
//f: the step's expectation of now jumps to fa[now] (as the root of 1)
//f[now]=Σf[qw]+d[now]=totd[](in son_tree)     写题的时候写的傻逼英语。。。
struct EDGE{int to,nxt;}ljl[N<<1];
il void Add(rgt p,rgt q){ljl[++cnt]=(EDGE){q,hd[p]},hd[p]=cnt;}
il void ADD(rg lst &x,rg lst y){x+=y;if(x>MOD)x-=MOD;}
il int qpow(rg lst x,rgt y)
{rg lst ret=1;while(y){if(y&1)ret=(ret*x)%MOD;x=(x*x)%MOD,y>>=1;}return ret;
}void Dfs(rgt now,rgt fm)
{fa[now]=fm,siz[now]=1,f[now]=d[now];for(rgt i=hd[now];i;i=ljl[i].nxt){if(qw==fm)continue;Dfs(qw,now);siz[now]+=siz[qw],f[now]+=f[qw];}
}int main()
{n=read();for(rgt i=1,p,q;i<n;++i){p=read(),q=read();++d[p],++d[q],Add(p,q),Add(q,p);}Dfs(1,0);for(rgt i=1;i<=n;++i)tot+=d[i];for(rgt now=1;now<=n;++now)for(rgt i=hd[now];i;i=ljl[i].nxt){if(qw==fa[now])ADD(Ans,1LL*siz[now]*f[now]%MOD*(n-siz[now])%MOD);else ADD(Ans,1LL*(n-siz[qw])*(tot-f[qw])%MOD*siz[qw]%MOD);}return printf("%lld\n",Ans*qpow(1LL*n*n%MOD,MOD-2)%MOD),0;
}

转载于:https://www.cnblogs.com/cjoierljl/p/9880009.html

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

  1. 洛谷 P3398 仓鼠找 sugar

    仓鼠找 sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为 1 1 1~ n n n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室( a a ...

  2. 洛谷 3398 仓鼠找sugar 【模板】判断树上两链有交

    [题解] 题意就是判断树上两条链是否有交.口诀是"判有交,此链有彼祖".即其中一条链的端点的Lca在另一条链上. 我们设两条链的端点的Lca中深度较大的为L2,对L2与另一条链的两 ...

  3. 洛谷P5520 [yLOI2019] 青原樱 题解

    洛谷P5520 [yLOI2019] 青原樱 题解 题目链接:P5520 [yLOI2019] 青原樱 题意: n n n 个空放 m m m 个物品,两两物品不能直接相邻,至少空一格 纯数学题. 看 ...

  4. 洛谷P5633 最小度限制生成树 题解

    洛谷P5633 最小度限制生成树 题解 题目链接:P5633 最小度限制生成树 题意: 给你一个有 n n n 个节点, m m m 条边的带权无向图,你需要求得一个生成树,使边权总和最小,且满足编号 ...

  5. 洛谷P2619 [国家集训队]Tree I 题解

    洛谷P2619 [国家集训队]Tree I 题解 题目链接:P2619 [国家集训队]Tree I 题意: 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有 need\text{n ...

  6. 洛谷P1282 多米诺骨牌 题解

    洛谷P1282 多米诺骨牌 题解 题目链接:P1282 多米诺骨牌 题意: 多米诺骨牌由上下 222 个方块组成,每个方块中有 1∼61\sim61∼6 个点.现有排成行的上方块中点数之和记为 S1S ...

  7. 洛谷P4084 [USACO17DEC]Barn Painting G 题解

    洛谷P4084 [USACO17DEC]Barn Painting G 题解 题目链接:P4084 [USACO17DEC]Barn Painting G 题意:题意:给定一颗N个节点组成的树,3种颜 ...

  8. 洛谷P3237 [HNOI2014]米特运输 题解

    洛谷P3237 [HNOI2014]米特运输 题解 题目链接:P3237 [HNOI2014]米特运输 题意: 这题面是真的长啊 qwq 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为 ...

  9. 洛谷P4315 月下“毛景树” 题解

    洛谷P4315 月下"毛景树" 题解 题目链接:P4315 月下"毛景树" 题意:请维护一个数据结构,支持 改第 kkk 条边的边权 结点 uuu 到 vvv ...

最新文章

  1. LVS DR模式部署
  2. SqlServer判断数据库、表、存储过程、函数是否存在
  3. ibatis中resultClass与resultMap 的区别
  4. 从零开始,做一个NodeJS博客(四):服务器渲染页面与Pjax
  5. Background-size完美兼容IE
  6. 关于使用在webforms里使用routing遇到的问题
  7. Qt笔记-递归获取文件夹中文件(含过滤文件名)
  8. MiniDao_1.6-SNAPSHOT 版本发布,轻量级Java持久化框架
  9. json ajax查询,jQuery AJAX和JSON性能查询
  10. 1512. 好数对的数目
  11. 拓端tecdat|R语言提取时间序列的周期性成分应用EMD,小波滤波器,Baxter过滤器等
  12. LBP算法,空间金字塔 文献阅读报告《基于差分量化局部二值模式的人脸反欺诈算法研究》
  13. 2021全网最全Activiti7教程04(Activiti7整合篇-欢迎收藏)
  14. 什么是 Sidecar
  15. Error starting Tomcat context
  16. 【产品经理】大学生知识库
  17. iPhone再添新配色: 黄铜色?
  18. MySQL导入百万数据实践
  19. 电脑不稳定? 可能系统已被病毒渗透:怎样判断是否遭受入侵
  20. 饱和非线性、非饱和非线性

热门文章

  1. 盲人如何学计算机编程,你知道盲人程序员是如何写代码的吗?
  2. DataReader与DataSet,DataGrid与DataList
  3. 学位论文如何在某一页插入参考文献,非最后一页
  4. 自学网络安全,你需要知道的基础知识
  5. 安装pip3(mac)
  6. cad线性标注命令_CAD线性标注快捷键命令(教你如何标注滚轮尺寸)
  7. CoInitialize是什么
  8. 数据分析之蒙特卡洛模拟
  9. 探索VGG网络与LeNet网络对精度的影响
  10. 车辆工程常用英文缩写