CF1823F 题解
思路
设
问题是
对比系数,只与
code
int n,s,t;
int head[maxn],tot;
struct nd{
int nxt,to;
}e[maxn<<1];
void add(int u,int v){e[++tot]={head[u],v};head[u]=tot;}
inline int ksm(int a,int b=mod-2){
int ans=1;
while(b){
if(b&1)ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans;
}
int d[maxn],f[maxn],a[maxn],b[maxn];
void dfs(int u,int fa){
int val=1;b[u]=(u==s);
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].to;if(v==fa)continue;
dfs(v,u);
val+=mod-a[v]*ksm(d[v])%mod;
b[u]+=b[v]*ksm(d[v])%mod;
}
val%=mod;b[u]%=mod;
a[u]=ksm(val*d[fa]%mod);if(fa==t)a[u]=0;
b[u]=ksm(val)*b[u]%mod;
}
void dfs1(int u,int fa){
f[u]=(a[u]*f[fa]+b[u])%mod;
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].to;if(v==fa)continue;
dfs1(v,u);
}
}
void work(){
n=read();s=read();t=read();
for(int i=1;i<n;i++){
int u=read(),v=read();
add(u,v),add(v,u);
++d[u],++d[v];
}
dfs(t,0);
f[t]=1;dfs1(t,0);
for(int i=1;i<=n;i++)printf("%lld ",f[i]);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架