AT_abc337_g Tree Inversion
1.P6411 [COCI2008-2009#3] MATRICA2.AT_tenka1_2014_final_d 高橋君3.CF963D Frequency of String4.P4465 [国家集训队] JZPSTR5.P9816 少项式复合幂6.P9817 lmxcslD7.P9821 [ICPC2020 Shanghai R] Sum of Log8.AT_agc034_e Complete Compress9.CF1381D The Majestic Brown Tree Snake10.CF1914F Programming Competition11.P10033 「Cfz Round 3」Sum of Permutation
12.AT_abc337_g Tree Inversion
13.P10060 [SNOI2024] 树 V 图14.P10061 [SNOI2024] 矩阵15.AT_arc170_d Triangle Card Game16.AT_arc170_c Prefix Mex Sequence17.CF1928C Physical Education Lesson18.CF1928D Lonely Mountain Dungeons19.CF1928E Modular Sequence20.CF1634D Finding Zero21.P3756 [CQOI2017] 老C的方块22.P6765 [APIO2020] 交换城市23.P3270 [JLOI2016] 成绩比较24.P5102 [JOI 2016 Final] 领地25.AT_arc148_e ≥ K26.CF1039D You Are Given a Tree27.AT_abc374_f Shipping28.CF2021E3 Digital Village (Extreme Version)29.CF2021D Boss, Thirsty30.CF1876G Clubstep31.P11592 [NordicOI 2024] Chair Game换根 dp,先随便钦定一个根。
记
上述两个东西可以直接在按 DFS 序差分加树状数组求出。
void dfs(int x,int fa=0)
{
dfn[x]=++tot,pos[tot]=x,siz[x]=1;
bit::change(x,1);
for(int y:v[x])
{
if(y==fa) continue;
//这里计算 y 对 x 的贡献
g[y]-=a[x];a[x]-=bit::query(x-1);
dfs(y,x),siz[x]+=siz[y];
a[x]+=bit::query(x-1);g[y]+=a[x];
}
return ;
}
然后考虑对于一个点
所以可以先求出
void dp(int x,int sum,int fa=0)
{
ans[x]=sum-a[x]+(x-1);
for(int y:v[x])
{
if(y==fa) continue;
dp(y,sum-a[x]+(x-1)-g[y],x);
}
return ;
}
signed main()
{
cin.tie(0),cout.tie(0);
ios::sync_with_stdio(0);
cin>>n;
for(int i=1,x,y;i<n;++i)
cin>>x>>y,v[x].push_back(y),v[y].push_back(x);
dfs(1);for(int i=1;i<=n;++i) sum+=a[i];
dp(1,sum);for(int i=1;i<=n;++i) cout<<ans[i]<<' ';
cout<<'\n';return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话