时代的眼泪(20230305 C组 T2)
题意简述
给定一棵树,每个节点上有一个权值
形式化地,就是求:
节点个数小于等于
解题思路
考虑换根预处理答案。先以
实际上,我们可以开一个基于值域的树状数组,并且对
在 dfs 的过程中,进入节点
问题到这里就解决了。注意
解题代码
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#define R myio::read_int()
//这里就把快读快写省掉了
using namespace std;
const int N=1e6+5;
int n,Q;long long ans[N];
int tot,w[N],head[N];
struct edge{
int v,nxt;
edge(int _v,int _nxt):v(_v),nxt(_nxt){}
edge() {}
} e[N<<1];
void adde(int u,int v) {e[++tot].v=v,e[tot].nxt=head[u],head[u]=tot;}
int c[N];
void upd(int x) {for(;x<=n;x+=x&-x) ++c[x];}
int ask(int x) {int Sum=0;for(;x;x-=x&-x) Sum+=c[x];return Sum;}
int ys[N];
void read_map() {
n=R,Q=R;w[0]=n+2;
for(int i=1;i<=n;++i) w[i]=ys[i]=R;
for(int i=1,u,v;i<n;++i) {
u=R,v=R;
adde(u,v);adde(v,u);
}
}
int fson[N],ffa[N];
void dfs(int rt,int fa) {
upd(w[rt]);
int nows=ask(w[rt]-1),nowf=ask(w[fa]-1);
for(int i=head[rt];i;i=e[i].nxt) {
int to=e[i].v;
if(to!=fa) dfs(to,rt);
} int news=ask(w[rt]-1),newf=ask(w[fa]-1);
fson[rt]=news-nows,ffa[rt]=newf-nowf;
}
int smu[N];
void dfs2(int rt,int fa) {
ans[rt]=ans[fa]+smu[rt]-fson[rt]-ffa[rt];
if(w[rt]<w[fa]) ans[rt]--;
for(int i=head[rt];i;i=e[i].nxt) {
int to=e[i].v;
if(to!=fa) dfs2(to,rt);
}
}
void pretreatment() {
sort(ys+1,ys+1+n);
for(int i=1;i<=n;++i) smu[i]=lower_bound(ys+1,ys+1+n,w[i])-ys-1;
int nend=unique(ys+1,ys+1+n)-ys-1;
for(int i=1;i<=n;++i) w[i]=lower_bound(ys+1,ys+1+nend,w[i])-ys;
dfs(1,0);
for(int i=1;i<=n;++i) ans[1]+=fson[i];
for(int i=head[1];i;i=e[i].nxt) {
int to=e[i].v;
dfs2(to,1);
}
}
void solve() {
pretreatment();
while(Q--) {
int u=R;
myio::print_int(ans[u]);
}
}
signed main(){
read_map();
solve();
return 0;
}
思维方式
假若要统计子树内的信息,若答案具有可减性,考虑进入时求一遍答案,出去时求一遍答案,相减即为所得。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律