[Codechef - AASHRAM] Gaithonde Leaves Aashram - 线段树,DFS序
[Codechef - AASHRAM] Gaithonde Leaves Aashram
Description
给出一棵树,树的“N”节点根植于节点1,每个节点‘u’与权重a[u]相关联。您还可以在树上执行两种类型的查询。查询的数量是‘M’。
1 U Val:对于类型1的查询,将给出一个节点‘U’和一个整数Val。设子树和=(包括‘U’)的子树中所有节点的权重之和。如果节点‘U’的子树之和为偶数,则将Val添加到‘U’的子树的每个节点(包括节点‘U’),否则将1添加到子树的每个节点(包括节点‘U’)。
2 U-V:对于类型2的查询,将给出两个节点‘U’和‘V’,并且必须打印‘U’和‘V’的子树和的位XOR。
Solution
DFS序搞一下即可。
SB的我把主程序里DFS用反结果居然过了样例……
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000005;
namespace seg
{
int val[N],tag[N];
void pushup(int p)
{
val[p]=val[p*2]+val[p*2+1];
}
void pushdown(int p,int l,int r)
{
if(tag[p])
{
tag[p*2]+=tag[p];
tag[p*2+1]+=tag[p];
val[p*2]+=tag[p]*((l+r)/2-l+1);
val[p*2+1]+=tag[p]*(r-(l+r)/2);
tag[p]=0;
}
}
void build(int p,int l,int r,int *src)
{
if(l==r)
{
val[p]=src[l];
}
else
{
build(p*2,l,(l+r)/2,src);
build(p*2+1,(l+r)/2+1,r,src);
pushup(p);
}
}
void modify(int p,int l,int r,int ql,int qr,int v)
{
if(l>qr || r<ql)
return;
if(l>=ql && r<=qr)
{
val[p]+=v*(r-l+1);
tag[p]+=v;
}
else
{
pushdown(p,l,r);
modify(p*2,l,(l+r)/2,ql,qr,v);
modify(p*2+1,(l+r)/2+1,r,ql,qr,v);
pushup(p);
}
}
int query(int p,int l,int r,int ql,int qr)
{
if(l>qr || r<ql)
return 0;
if(l>=ql && r<=qr)
return val[p];
else
{
pushdown(p,l,r);
return query(p*2,l,(l+r)/2,ql,qr) + query(p*2+1,(l+r)/2+1,r,ql,qr);
}
}
}
namespace tree
{
vector <int> g[N];
int dfn[N],fin[N],vis[N],ind=0,n;
void link(int p,int q)
{
g[p].push_back(q);
g[q].push_back(p);
}
void dfs(int p)
{
vis[p]=1;
dfn[p]=++ind;
for(int i=0; i<g[p].size(); i++)
{
if(vis[g[p][i]]==0)
{
dfs(g[p][i]);
}
}
fin[p]=ind;
}
void presolve()
{
memset(vis,0,sizeof vis);
dfs(1);
}
int query(int p)
{
return seg::query(1,1,n,dfn[p],fin[p]);
}
void modify(int p,int v)
{
seg::modify(1,1,n,dfn[p],fin[p],v);
}
}
int n,m,t1,t2,t3,t4;
int v[N],src[N];
signed main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1; i<=n; i++)
{
cin>>v[i];
}
for(int i=1; i<n; i++)
{
cin>>t1>>t2;
tree::link(t1,t2);
}
tree::presolve();
tree::n=n;
for(int i=1; i<=n; i++)
{
src[tree::dfn[i]]=v[i];
}
seg::build(1,1,n,src);
for(int i=1; i<=m; i++)
{
cin>>t1>>t2>>t3;
if(t1==1)
{
if(tree::query(t2)%2ll)
{
tree::modify(t2,1);
}
else
{
tree::modify(t2,t3);
}
}
else
{
cout<<(tree::query(t2) ^ tree::query(t3))<<endl;
}
}
}
[Codechef - AASHRAM] Gaithonde Leaves Aashram - 线段树,DFS序的更多相关文章
- Tsinsen A1505. 树(张闻涛) 倍增LCA,可持久化线段树,DFS序
题目:http://www.tsinsen.com/A1505 A1505. 树(张闻涛) 时间限制:1.0s 内存限制:512.0MB 总提交次数:196 AC次数:65 平均分: ...
- BZOJ_3252_攻略_线段树+dfs序
BZOJ_3252_攻略_线段树+dfs序 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏< ...
- 【XSY2534】【BZOJ4817】树点涂色 LCT 倍增 线段树 dfs序
题目大意 Bob有一棵\(n\)个点的有根树,其中\(1\)号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜 ...
- 【bzoj4817】树点涂色 LCT+线段树+dfs序
Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. ...
- S - Query on a tree HDU - 3804 线段树+dfs序
S - Query on a tree HDU - 3804 离散化+权值线段树 题目大意:给你一棵树,让你求这棵树上询问的点到根节点直接最大小于等于val的长度. 这个题目和之前写的那个给你一棵 ...
- HDU 5692 线段树+dfs序
Snacks Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-3306】树 线段树 + DFS序
3306: 树 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 792 Solved: 262[Submit][Status][Discuss] De ...
- HDU5692(线段树+dfs序)
Snacks Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Statu ...
随机推荐
- 剑指offer-面试题4-二维数组中的查找-数组
/* 题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. */ /* 解题 ...
- 「JOI 2017 Final」绳
题意 loj 做法 首先我们观察到最后能折起来的充要条件是: 只有两个颜色,除首尾外,所有颜色块内的数量为偶数 因为为偶数,我们进一步推论: 所有颜色块起始位置奇偶性相同 然后因为增与减都会有相同花费 ...
- Perl-统计某电路面积、功耗占比(NVDIA2019笔试)
1.perl脚本 open IN, "<", "data.txt" or die "The file does not exist!" ...
- 聊聊SNMP协议
注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 本文源链接:https://www.cnblogs.com/chloneda/p/snmp-protoco ...
- 轻量级RPC设计与实现第一版
什么是RPC RPC (Remote Procedure Call Protocol), 远程过程调用,通俗的解释就是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应 ...
- es6转码和package.json中的配置
在线实时转换 需要babel-register .babelrc中: { "presets": [ "es2015" ] } 项目中main.js配置: 前提是 ...
- Jekyll 摘要
在 Windows 上安装 Requirements Permalink Ruby version 2.4.0 or above, including all development headers ...
- .net mvc 使用 aspose.cells导出数据
public class AsposeCellsHelper { public Workbook workBook; public Worksheet worksheet; Style style; ...
- elasticsearch index 过程
(1)index request 到某一个Node(选择node的方式是采用round-robin)方法,此node 称为coordinate node,继续当前index request应该执行在哪 ...
- 搜索 rerank : learn to rank 算法
(1)LambdaMART 算法可参考如下两篇博客: http://www.cnblogs.com/wowarsenal/p/3900359.html http://www.cnblogs.com/w ...