Description

“是的。”我回答,“我不会忘记你。在森林里我会一点点记起往日的世界。要记起的大概很多很多:各种人、各种场所、各种光、各种歌曲……”
——村上春树《世界尽头与冷酷仙境》

在没有心存在的世界尽头,音乐能够使小镇居民消散的心重新聚拢成形。作为镇子里唯一一个还残留着些许音乐记忆的人,我逐渐记起了往昔点滴……

记忆中有一棵无根树,有n个节点。
对于一棵有根树的每一个非叶子节点,我们都等概率选中其一个儿子节点作为偏好儿子。对于一条从父亲指向儿子的树边(u,v),如果v是u的偏好儿子,则称这条边为重边,否则为轻边。
我们定义一棵有根树的权值为其每一个节点到根路径上的轻边条数的和的期望值。
请对无根树每一个节点输出其为根的有根树的权值。答案模998244353。

Input

文件第一行是一个正整数n。
接下来n-1行,每行两个正整数(x,y)表示一条树边。

Output

输出文件共n行,每一行一个整数表示答案。

Sample Input

5
1 2
1 3
3 4
3 5

Sample Output

3
1
665496238
499122178
499122178

Data Constraint

对于10%的数据,保证n<=10。
对于30%的数据,保证n<=2000。
对于100%的数据,保证n<=10^5。

题解

求期望,
就是直接上套路。

设fxf_x表示x子树中的所有点,到x的期望和。
fx=∑k∈sonxfk∗(1/sonx)(选为重边)+(fk+sizek)∗(1−1/sonx)(选为轻边)f_x=\sum_{k∈son_x}f_k*(1/son_x)(选为重边)+(f_k+size_k)*(1-1/son_x)(选为轻边)

求一个点为根的期望的复杂度是O(n)的,
如果要求每个点,那么总的复杂度就是O(n2n^2)的。
如果每次只改变根节点与它儿子的边,就是将根节点的某个儿子旋转到根节点上,这样修改只与两个点有关,其他都是不变的,这样复杂度就是O(n)的。

code

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <queue>
#define N 200003
#define ll long long
#define mo 998244353
using namespace std;
char ch;
void read(int& n)
{n=0;ch=getchar();while(ch<'0'||ch>'9')ch=getchar();while('0'<=ch && ch<='9')n=(n<<1)+(n<<3)+ch-'0',ch=getchar();
}
void write(ll x)
{if(x>9)write(x/10);putchar(x%10+48);}int nxt[N*2],b[N],to[N*2],tot,n,m,x,y;
ll f[N],size[N],son[N],ans[N];
int z[N],l,r,fa[N],top;void ins(int x,int y)
{nxt[++tot]=b[x];to[tot]=y;b[x]=tot;son[y]++;
}ll ksm(ll x,int y)
{ll s=1;while(y){if(y&1)s=s*x%mo;x=x*x%mo;y>>=1;}return s;
}void dfs(int x,int fa)
{ll ss=ksm(son[x]-1,mo-2);for(int i=b[x];i;i=nxt[i])if(to[i]!=fa){dfs(to[i],x);f[x]=(f[x]+ss*f[to[i]]%mo+(son[x]-2)*ss%mo*(f[to[i]]+size[to[i]])%mo)%mo;size[x]+=size[to[i]];}size[x]++;
}void exchange(int x/*root*/,int y/*new root*/)
{son[x]--;son[y]++;size[x]=size[y]=1;f[x]=f[y]=0;//reset xll ss=ksm(son[x]-1,mo-2);for(int i=b[x];i;i=nxt[i])if(to[i]!=y){f[x]=(f[x]+ss*f[to[i]]%mo+(son[x]-2)*ss%mo*(f[to[i]]+size[to[i]])%mo)%mo;size[x]+=size[to[i]];}//reset yss=ksm(son[y]-1,mo-2);for(int i=b[y];i;i=nxt[i]){f[y]=(f[y]+ss*f[to[i]]%mo+(son[y]-2)*ss%mo*(f[to[i]]+size[to[i]])%mo)%mo;size[y]+=size[to[i]];}
}void work(int x,int fa)
{ans[x]=f[x];for(int i=b[x];i;i=nxt[i])if(to[i]!=fa){exchange(x,to[i]);work(to[i],x);exchange(to[i],x);}
}int main()
{freopen("redemption.in","r",stdin);freopen("redemption.out","w",stdout);read(n);for(int i=1;i<n;i++)read(x),read(y),ins(x,y),ins(y,x);memset(size,0,sizeof(size));memset(f,0,sizeof(f));son[1]++;dfs(1,0);work(1,0);for(int i=1;i<=n;i++){write(ans[i]);putchar('\n');}return 0;
}

JZOJ5444. 【NOIP2017提高A组冲刺11.2】救赎相关推荐

  1. JZOJ 5441. 【NOIP2017提高A组冲刺11.1】序列

    Description 给定一个1~n的排列x,每次你可以将x1~xi翻转.你需要求出将序列变为升序的最小操作次数.有多组数据. Input 第一行一个整数t表示数据组数. 每组数据第一行一个整数n, ...

  2. jzoj_5455. 【NOIP2017提高A组冲刺11.6】拆网线

    Description 企鹅国的网吧们之间由网线互相连接,形成一棵树的结构.现在由于冬天到了,供暖部门缺少燃料,于是他们决定去拆一些网线来做燃料.但是现在有K只企鹅要上网和别人联机游戏,所以他们需要把 ...

  3. [JZOJ5459]【NOIP2017提高A组冲刺11.7】密室

    Description 小X 正困在一个密室里,他希望尽快逃出密室. 密室中有N 个房间,初始时,小X 在1 号房间,而出口在N 号房间. 密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会 ...

  4. JZOJ 5458. 【NOIP2017提高A组冲刺11.7】质数

    Description 小X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感.小X 认为,质数是一切自然数起源的地方. 在小X 的认知里,质数是除了本身和1 以外,没有其他因数的数 ...

  5. JZOJ 5455. 【NOIP2017提高A组冲刺11.6】拆网线

    Description 企鹅国的网吧们之间由网线互相连接,形成一棵树的结构.现在由于冬天到了,供暖部门缺少燃料,于是他们决定去拆一些网线来做燃料.但是现在有K只企鹅要上网和别人联机游戏,所以他们需要把 ...

  6. JZOJ 5445. 【NOIP2017提高A组冲刺11.2】失格

    Description 胆小鬼连幸福都会害怕,碰到棉花都会受伤,有时还被幸福所伤. --太宰治<人间失格> 回顾我的一生,一共有n个事件,每一个事件有一个幸福值p_i. 我想用n-1条线把 ...

  7. JZOJ5445. 【NOIP2017提高A组冲刺11.2】失格

    Description 胆小鬼连幸福都会害怕,碰到棉花都会受伤,有时还被幸福所伤. --太宰治<人间失格> 回顾我的一生,一共有n个事件,每一个事件有一个幸福值p_i. 我想用n-1条线把 ...

  8. JZOJ 5466. 【NOIP2017提高A组冲刺11.9】玩游戏

    Description 小A得了忧郁综合症,小B正在想办法开导她. 机智的小B决定陪着小A玩游戏,他从魔法的世界里变出一张无向联通图,每条边上都有边权.小B定义一条路径的权值为所有经过边中的最大权值, ...

  9. JZOJ 5462. 【NOIP2017提高A组冲刺11.8】好文章

    Description nodgd写了一篇文章,自认为这是一篇好文章.nodgd的文章由n个小写英文字母组成.文章的一个子串指的是文章中的一段连续的字母,子串的长度就是这一段的字母个数.nodgd在文 ...

  10. JZOJ 5463. 【NOIP2017提高A组冲刺11.8】证书

    Description Pulumi生活在P城的角落,而他的朋友们gjdy,oyski,tutuwai等等生活在P城的靠中心位置. P城很大,但它拥有优秀的城市结构,同时P城重视文化教育的发展,P城共 ...

最新文章

  1. S-T平面图中利用最短路求最小割(BZOJ 1001)
  2. 全球及中国汽车卡钳行业产销需求现状与投资策略分析报告2022年版
  3. 解决QTreeWidget中item无法整行同时显示相同颜色
  4. C++基础new和delete运算符,new和delete简介
  5. linux获取url中文内容_SEO站内内链优化 – URL优化,提高页面权重
  6. 大型Web网站优化总结一
  7. Vue 2.0 升(cai)级(keng)之旅
  8. C语言实现植物大战僵尸自动收集阳光(三) 解决收集不全与收集奖杯卡死的问题
  9. 华为测试岗面试经验(附面试流程)
  10. ORACLE存储过程中sleep的使用
  11. ZYNQ - 嵌入式Linux开发 -10- ZYNQ启动流程分析
  12. Mysql innodb 间隙锁
  13. 阿里云弹性计算总经理张献涛:智能化、高效能、新交互将重塑互联网
  14. 渗透测试之AppScan篇
  15. golang 打桩,mock 数据怎么玩?
  16. [聊聊] 【自制OTG数据线】好多人都花钱买了,有几个懂呢?
  17. 建立完善的员工晋升机制_员工晋升机制
  18. C 语言回调函数详解
  19. SQLServer bigint 转 int带符号转换函数(原创)
  20. 微软edge浏览器不显示图片问题

热门文章

  1. 期货的结算价和收盘价(期货的结算价和收盘价一样吗)
  2. MyExcel 2.1.3 发布,提供行级读取处理能力
  3. java定义静态常量_如何在Java中定义常量
  4. [CDOJ 5] Diligent Boys Don’t Love [动态规划]
  5. python转换迅雷地址为http地址
  6. 10个非常基础的 Javascript 问题
  7. openmv图像格式不支持问题解决方案
  8. 美元的阿拉伯数字转换为英文大写的格式
  9. 网络编程——CS模型(总结)
  10. excel 365 版本安装 Solver