codeforces 383C Propagating tree 线段树

时间:2022-10-23 14:04:47

http://codeforces.com/problemset/problem/383/C

题目就是说,  给一棵树,将一个节点的值+val, 那么它的子节点都会-val, 子节点的子节点+val........这样类推, 给一系列操作,2是查询一个节点的值, 1是将一个节点的值+val。

首先,<dfs一遍求出dfs序以及每个点的深度, 然后建两颗线段树, 深度为奇数的建一棵, 偶数建一棵。 改变一个节点的值, 就把与他奇偶相同的那颗树全都+val, 不同的全都-val。 具体看代码>.....

 #include<bits/stdc++.h>
using namespace std;
#define pb(x) push_back(x)
#define ll long long
#define mk(x, y) make_pair(x, y)
#define lson l, m, rt<<1
#define mem(a) memset(a, 0, sizeof(a))
#define rson m+1, r, rt<<1|1
#define mem1(a) memset(a, -1, sizeof(a))
#define mem2(a) memset(a, 0x3f, sizeof(a))
#define rep(i, a, n) for(int i = a; i<n; i++)
#define ull unsigned long long
typedef pair<int, int> pll;
const double PI = acos(-1.0);
const double eps = 1e-;
const int mod = 1e9+;
const int inf = ;
const int dir[][] = { {-, }, {, }, {, -}, {, } };
const int maxn = 2e5+;
int in[maxn], out[maxn], num, val[maxn], head[maxn], dis[maxn], dfs_clock;
int cnt[maxn<<][];
struct node
{
int to, nextt;
}e[maxn*];
void add(int u, int v) {
e[num].to = v;
e[num].nextt = head[u];
head[u] = num++;
}
void dfs(int u, int fa) {
dis[u] = dis[fa]+;
in[u] = ++dfs_clock;
for(int i = head[u]; ~i; i = e[i].nextt) {
int v = e[i].to;
if(v == fa)
continue;
dfs(v, u);
}
out[u] = dfs_clock;
}
void pushDown(int rt, int sign) {
if(cnt[rt][sign]) {
cnt[rt<<][sign] += cnt[rt][sign];
cnt[rt<<|][sign] += cnt[rt][sign];
cnt[rt][sign] = ;
}
}
void update(int L, int R, int l, int r, int rt, int val, int sign) {
if(L<=l && R>=r) {
cnt[rt][sign] += val;
return ;
}
pushDown(rt, sign);
int m = l+r>>;
if(L<=m)
update(L, R, lson, val, sign);
if(R>m)
update(L, R, rson, val, sign);
}
int query(int p, int l, int r, int rt, int sign) {
if(l == r) {
return cnt[rt][sign];
}
pushDown(rt, sign);
int m = l+r>>;
int ret = ;
if(p<=m)
return query(p, lson, sign);
else
return query(p, rson, sign);
}
int main()
{
int n, m, x, y, z;
cin>>n>>m;
for(int i = ; i<=n; i++) {
scanf("%d", &val[i]);
}
mem1(head);
for(int i = ; i<n-; i++) {
scanf("%d%d", &x, &y);
add(x, y);
add(y, x);
}
dis[] = ;
dfs(, );
while(m--) {
scanf("%d", &z);
if(z == ) {
scanf("%d", &x);
printf("%d\n", query(in[x], , n, , dis[x]&)+val[x]);
} else {
scanf("%d%d", &x, &y);
update(in[x], out[x], , n, , y, dis[x]&);
update(in[x], out[x], , n, , -y, !(dis[x]&));
}
}
}

codeforces 383C Propagating tree 线段树的更多相关文章

  1. Codeforces 383C Propagating tree&comma; 线段树&comma; 黑白染色思想

    按深度染色,奇深度的点存反权值. #include <bits/stdc++.h> using namespace std; vector <]; ],a[],s[],vis[],i ...

  2. Codeforces 383C &period; Propagating tree【树阵,dfs】

    标题效果: 有一棵树,有两种操作模式对本树:1:表示为(1 x val),在NOx加在节点上val,然后x每个节点加上儿子- val.给每个儿子一个儿子在一起-(- val),加到没有儿子为止.2:表 ...

  3. CodeForces 384E Propagating tree &lpar;线段树&plus;dfs&rpar;

    题意:题意很简单么,给定n个点,m个询问的无向树(1为根),每个点的权值,有两种操作, 第一种:1 x v,表示把 x 结点加上v,然后把 x 的的子结点加上 -v,再把 x 的子结点的子结点加上 - ...

  4. CodeForces 383C Propagating tree

    Propagating tree Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces ...

  5. &lbrack;Codeforces 1197E&rsqb;Culture Code&lpar;线段树优化建图&plus;DAG上最短路&rpar;

    [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路) 题面 有n个空心物品,每个物品有外部体积\(out_i\)和内部体积\(in_i\),如果\(in_i& ...

  6. &lbrack;Codeforces 1199D&rsqb;Welfare State&lpar;线段树&rpar;

    [Codeforces 1199D]Welfare State(线段树) 题面 给出一个长度为n的序列,有q次操作,操作有2种 1.单点修改,把\(a_x\)修改成y 2.区间修改,把序列中值< ...

  7. &lbrack;Codeforces 316E3&rsqb;Summer Homework&lpar;线段树&plus;斐波那契数列&rpar;

    [Codeforces 316E3]Summer Homework(线段树+斐波那契数列) 顺便安利一下这个博客,给了我很大启发(https://gaisaiyuno.github.io/) 题面 有 ...

  8. Buses and People CodeForces 160E 三维偏序&plus;线段树

    Buses and People CodeForces 160E 三维偏序+线段树 题意 给定 N 个三元组 (a,b,c),现有 M 个询问,每个询问给定一个三元组 (a',b',c'),求满足 a ...

  9. CodeForces 877E DFS序&plus;线段树

    CodeForces 877E DFS序+线段树 题意 就是树上有n个点,然后每个点都有一盏灯,给出初始的状态,1表示亮,0表示不亮,然后有两种操作,第一种是get x,表示你需要输出x的子树和x本身 ...

随机推荐

  1. NSOperation操作依赖和监听

    1.操作依赖 NSOperation之间可以设置依赖来保证执行顺序 比如一定要让操作A执行完后,才能执行操作B,可以这么写 [operationB addDependency:operationA]; ...

  2. bytes和bytearray

    bytes bytes是Python 3中特有的,Python 2 里不区分bytes和str. Python 2中 >>> type(b'xxxxx') <type 'str ...

  3. windows log 打印语句

    1.格式化字符串(Writes formatted data to the specified string) wchar_t szMessage[260]; PWSTR pszFunction = ...

  4. java001-Helloworld

    public class test05 { public static void main(String[] args) { System.out.println("Hello World! ...

  5. HDFS(Hadoop Distributed File System )

    HDFS(Hadoop Distributed File System ) HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表 ...

  6. 新秀系列C&sol;C&plus;&plus;经典问题&lpar;六&rpar;

    类包含一个指向成员复制 称号:下面是类和执行的阵列的声明.题.并针对存在的问题提出几种解决方式. template<typename T> class Array { public: Ar ...

  7. Python中 list&comma; numpy&period;array&comma; torch&period;Tensor 格式相互转化

    1.1 list 转 numpy ndarray = np.array(list) 1.2 numpy 转 list list = ndarray.tolist() 2.1 list 转 torch. ...

  8. 638&period; Shopping Offers

    In LeetCode Store, there are some kinds of items to sell. Each item has a price. However, there are ...

  9. Android之TabHost实现Tab切换

    TabHost是整个Tab的容器,包含TabWidget和FrameLayout两个部分,TabWidget是每个Tab的表情,FrameLayout是Tab内容. 实现方式有两种: 1.继承TabA ...

  10. TW实习日记:第16天

    前端的样式bug实在是太太太莫名其妙了,尤其是封装好的组件,一层套一层的,根本不知道是哪一层出了问题...除了改bug就是做新功能,真想吐槽一下这个项目的留言板,根本没人会用吧...这功能实在是太老旧 ...