A - Aragorn's Story

直接套 线段树+树剖 板子

代码:

// Created by CAD on 2019/8/12.
#include <bits/stdc++.h>
#define lson (p<<1)
#define rson (p<<1|1)
using namespace std;
using ll=long long;
const int maxn=5e4+5;
ll d[maxn<<2],laz[maxn<<2];
int wt[maxn],w[maxn],head[maxn],dep[maxn];
int id[maxn],son[maxn],f[maxn],siz[maxn],top[maxn];
int tot,cnt,n;
void build(int l,int r,int p)
{
laz[p]=0;
if(l==r)
{
d[p]=wt[l];
return ;
}
int m=(l+r)>>1;
build(l,m,lson),build(m+1,r,rson);
d[p]=d[lson]+d[rson];
}
void pushdown(int s, int t,int p)
{
int m=(s+t)>>1;
d[lson]+=(m-s+1)*laz[p],d[rson]+=(t-m)*laz[p];
laz[lson]+=laz[p],laz[rson]+=laz[p];
laz[p]=0;
}
void update(int l,int r,int s,int t,int c,int p)
{
if(l<=s&&t<=r)
{
d[p]+=(t-s+1)*c;
laz[p]+=c;
return ;
}
if(laz[p]) pushdown(s,t,p);
int m=(s+t)>>1;
if(l<=m) update(l,r,s,m,c,lson);
if(r>m) update(l,r,m+1,t,c,rson);
d[p]=d[lson]+d[rson];
}
ll getsum(int l,int r,int s,int t,int p)
{
if(l<=s&&t<=r)
return d[p];
if(laz[p]) pushdown(s,t,p);
int m=(s+t)>>1;
if(l<=m) return getsum(l,r,s,m,lson);
else return getsum(l,r,m+1,t,rson);
}
struct edge{
int to,next;
}e[maxn<<1];
void add(int u,int v)
{
e[++cnt].to=v;
e[cnt].next=head[u];
head[u]=cnt;
}
void dfs1(int u,int fa,int deep)
{
dep[u]=deep;
f[u]=fa;
siz[u]=1;
int maxson=-1;
for(int i=head[u];i;i=e[i].next)
{
int v=e[i].to;
if(v==fa) continue;
dfs1(v,u,deep+1);
siz[u]+=siz[v];
if(siz[v]>maxson)
maxson=siz[v],son[u]=v;
}
}
void dfs2(int u,int topf)
{
top[u]=topf;
id[u]=++tot;
wt[tot]=w[u];
if(!son[u]) return ;
dfs2(son[u],topf);
for(int i=head[u];i;i=e[i].next)
{
int v=e[i].to;
if(v==f[u]||v==son[u]) continue;
dfs2(v,v);
}
}
void updrange(int x,int y,int k)
{
while(top[x]!=top[y])
{
if(dep[top[x]]<dep[top[y]]) swap(x,y);
update(id[top[x]],id[x],1,n,k,1);
x=f[top[x]];
}
if(dep[x]>dep[y]) swap(x,y);
update(id[x],id[y],1,n,k,1);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int m,p;
while(cin>>n>>m>>p)
{
cnt=tot=0;
for(int i=1;i<=n;++i) head[i]=0,son[i]=0,siz[i]=0;
for(int i=1;i<=n;++i) cin>>w[i];
for(int i=1,u,v;i<=m;++i) cin>>u>>v,add(u,v),add(v,u);
dfs1(1,0,1);
dfs2(1,1);
build(1,n,1);
for(int i=1;i<=p;++i)
{
string op;
cin>>op;
int x,y,k;
if(op=="I")
cin>>x>>y>>k,updrange(x,y,k);
else if(op=="D")
cin>>x>>y>>k,updrange(x,y,-k);
else if(op=="Q")
cin>>x,cout<<getsum(id[x],id[x],1,n,1)<<endl;
}
}
return 0;
}

Aragorn's Story的更多相关文章

  1. HDU 3966 Aragorn's Story 树链剖分+树状数组 或 树链剖分+线段树

    HDU 3966 Aragorn's Story 先把树剖成链,然后用树状数组维护: 讲真,研究了好久,还是没明白 树状数组这样实现"区间更新+单点查询"的原理... 神奇... ...

  2. hdu 3966 Aragorn's Story 树链剖分 按点

    Aragorn's Story Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. hdu 3966 Aragorn&#39;s Story(树链剖分+树状数组)

    pid=3966" target="_blank" style="">题目链接:hdu 3966 Aragorn's Story 题目大意:给定 ...

  4. HDU 3966 Aragorn&#39;s Story(树链剖分)

    HDU Aragorn's Story 题目链接 树抛入门裸题,这题是区间改动单点查询,于是套树状数组就OK了 代码: #include <cstdio> #include <cst ...

  5. HDOJ 3966 Aragorn&#39;s Story

    树链拆分+树阵 (进入坑....) Aragorn's Story Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/327 ...

  6. HDU - 3966 Aragorn's Story(树链剖分入门+线段树)

    HDU - 3966 Aragorn's Story Time Limit: 3000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & ...

  7. HDU 3966 Aragorn's Story 动态树 树链剖分

    Aragorn's Story Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  8. [hdu3966]Aragorn's Story

    传送门 题目描述 Our protagonist is the handsome human prince Aragorn comes from The Lord of the Rings. One ...

  9. Aragorn's Story 树链剖分+线段树 && 树链剖分+树状数组

    Aragorn's Story 来源:http://www.fjutacm.com/Problem.jsp?pid=2710来源:http://acm.hdu.edu.cn/showproblem.p ...

  10. codeforces 148E Aragorn's Story 背包DP

    Aragorn's Story Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/probl ...

随机推荐

  1. # Pycharm打造高效Python IDE

    Pycharm打造高效Python IDE 建议以scientific mode运行,在科学计算时,可以方便追踪变量变化,并且会提示函数的用法,比普通模式下的提示更加智能,一般在文件中引入了numpy ...

  2. JAVA重载和数组

    Java 重载:相同的方法名,但参数个数或者类型不一样的情况下,自动执行不同的方法 数组:   int[] array=new int[5];  System.out.println(array); ...

  3. 2019-2020Nowcoder Girl初赛题解

    写了一天计算几何,心态崩了,水一篇题解休息休息. emmmm,如果您是一名现役OIer/CSPer,那看这篇文章也许并不能在你的生命中留下些什么(潮子语录),因为相比NOIP/CSP这个比赛其实比较简 ...

  4. Python-RabbitMQ-RPC(非阻塞版)

    服务器端:rpc_server.py import pika,time connection = pika.BlockingConnection(pika.ConnectionParameters(h ...

  5. Zabbix 监控常见服务

    监控Apache性能 1.客户端编译安装Apache服务,并在编译选项中开启监控页面功能. [root@localhost ~]# yum install -y gcc openssl openssl ...

  6. Codeforces 1194E. Count The Rectangles

    传送门 看到 $n<=5000$,直接暴力枚举左右两条竖线 然后考虑怎么计算高度在某个范围内,左端点小于等于某个值,右端点大于等于某个值的横线数量 直接用权值树状数组维护当前高度在某个区间内的横 ...

  7. (转)Dubbo服务暴露过程源码分析

    参考

  8. Dubbo消费方服务调用过程源码分析

    参考:dubbo消费方服务调用过程源码分析dubbo基于spring的构建分析Dubbo概述--调用过程dubbo 请求调用过程分析dubbo集群容错机制代码分析1dubbo集群容错策略的代码分析2d ...

  9. 设置adb shell的环境变量

    1.设置adb系统变量 adb  D:\androidStudio\platform-tools;D:\androidStudio\tools 2.设置path系统变量 path D:\android ...

  10. HTML 5的革新之一:语义化标签一节元素标签。

    摘至于:<HTML 5的革新——语义化标签(一)> HTML 5的革新之一:语义化标签一节元素标签. 在HTML 5出来之前,我们用div来表示页面章节,但是这些div都没有实际意义.(即 ...