牛客——求和(dfs序+树状数组)

求和

https://ac.nowcoder.com/acm/problem/204871

原题链接
题意:
给定一棵树,有点权;两种操作,一是修改某个单点的权值,二是查询某个点为根节点的子树的点权之和。
思路:
dfs序后,子树都处于一个区间里,所以问题就转化成了单点修改、区间求和。
用树状数组维护即可。
代码:

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn=1e6+7;
int n,m,k;
int h[maxn],idx;
struct node{
    int e,ne;
}edge[maxn*2];
ll w[maxn],tr[maxn*4];
void add(int u,int v){///前向星存图
    edge[idx]={v,h[u]};h[u]=idx++;
}
ll in[maxn],out[maxn],timetmp;
void dfs(int u,int fa){//dfs记录dfs序列
    in[u]=++timetmp;
    for(int i=h[u];~i;i=edge[i].ne){
        int j=edge[i].e;
        if(j==fa) continue;
        dfs(j,u);
    }
    out[u]=timetmp;
}
///树状数组维护区间
ll lowbit(int x){
    return x&(-x);
}
void update(int pos,int val){
    while(pos<maxn){
        tr[pos]+=val;
        pos=pos+lowbit(pos);
    }
}
ll qask(int pos){
    ll res=0;
    while(pos){
        res+=tr[pos];
        pos=pos-lowbit(pos);
    }
    return res;
}
int main(){
    cin>>n>>m>>k;
    memset(h,-1,sizeof h);
    for(int i=1;i<=n;i++) cin>>w[i];
    for(int i=1;i<n;i++){
        ll u,v;
        cin>>u>>v;
        add(u,v);add(v,u);
    }
    dfs(k,-1);
    for(int i=1;i<=n;i++)
        update(in[i],w[i]);
    while(m--){
        int op;cin>>op;
        if(op==1){
            ll pos,x;
            cin>>pos>>x;
            update(in[pos],x);
        }
        else{
            int pos;cin>>pos;
            printf("%lld\n",qask(out[pos])-qask(in[pos]-1));
        }
    }
    return 0;
}
全部评论

相关推荐

05-21 18:32
已编辑
湖南工学院 Java
这条干货多数是给i人朋友们分享的,知道你们开不了口,可以试试我说的这些方法1.调整心态:接受初期的尴尬刚开始进入一个新环境,双方都属于一个认识对方的过程,尴尬瞬间是难免存在的。首先,你要接受尴尬,允许自己犯错,实习期本身就是来学习的,同事也不会期待你完美无缺。另外,不要太以自我为中心,其实你的尴尬瞬间也许没有人在意,是因你的对自己的关注而放大了不安全感。2.准备一些防止尴尬的话题和工作相关的,可以以请教的方式开启。比如:xx,这个表格我没有看懂,可以给我讲一下吗非工作的话题,可以聊聊中午吃什么、当地的天气如何、通勤远不远之类的。比如:附近有什么好吃的外卖吗?我刚来还不太熟悉3.每日练习,逐渐打...
sweep^0416:内向人,遇到好的领导很重要,我之前一段实习组里全e人就我一个i 刚入职第一周还会带着我聊一下,后面越来越冷落我,实在受不了,每天去到就想亖,mentor还要pua说是我融入不了集体(我真的以为是我的问题)后面我离职了,去了现在这一家公司,我的领导也是e人,但是我融入的很好,组里的人全都很好很好,也不会出现小团体什么的,所以说内向不是不融入环境的根本,就是公司跟带教的问题
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务