uoj #58【WC2013】糖果公园
树上带修莫队模板题
#include<bits/stdc++.h>
const int N=;
typedef long long i64;
char buf[N*],*ptr=buf-,ob[N*],*op=ob;
int _(){
int x=;
while(*ptr<)++ptr;
while(*ptr>)x=x*+*ptr++-;
return x;
}
void pr(i64 x){
int ss[],sp=;
do ss[++sp]=x%+;while(x/=);
while(sp)*op++=ss[sp--];
*op++=;
}
void maxs(int&a,int b){if(a<b)a=b;}
int n,m,q;
std::vector<int>e[N];
int v1[N],v2[N],c[N];
int tk=;
int os[N][];
int X=,Y=,Z=,in[N];
int ts[N],dep[N],fa[N],sz[N],top[N],son[N],md[N],id[N],idp=,D=;
i64 ans=;
inline void del(int x){ans-=i64(v1[x])*v2[ts[x]--];}
inline void ins(int x){ans+=i64(v1[x])*v2[++ts[x]];}
void f2(int w){
id[w]=idp;
for(int i=;i<e[w].size();++i){
int u=e[w][i];
if(u!=fa[w]&&!id[u])f2(u);
}
}
void f3(int w,int tp){
top[w]=tp;
if(son[w])f3(son[w],tp);
for(int i=;i<e[w].size();++i){
int u=e[w][i];
if(u!=fa[w]&&u!=son[w])f3(u,u);
}
}
void f1(int w,int pa){
dep[w]=dep[fa[w]=pa]+;
sz[w]=;
for(int i=;i<e[w].size();++i){
int u=e[w][i];
if(u!=pa){
f1(u,w);
sz[w]+=sz[u];
if(sz[u]>sz[son[w]])son[w]=u;
if(!id[u])maxs(md[w],md[u]+);
}
}
if(w==||md[w]==D)++idp,f2(w);
}
int lca(int x,int y){
int a=top[x],b=top[y];
while(a!=b){
if(dep[a]>dep[b])x=fa[a],a=top[x];
else y=fa[b],b=top[y];
}
return dep[x]<dep[y]?x:y;
}
i64 as[N];
struct Q{
int x,y,z,ID;
bool operator<(const Q&w)const{
if(id[x]!=id[w.x])return id[x]<id[w.x];
if(id[y]!=id[w.y])return (id[y]<id[w.y])^(id[x]&);
return z<w.z;
}
void mov(int&w0,int b){
int a=w0;w0=b;
int g=lca(a,b);
for(;a!=g;a=fa[a])(in[a]^=)?ins(c[a]):del(c[a]);
for(;b!=g;b=fa[b])(in[b]^=)?ins(c[b]):del(c[b]);
}
void cal(){
int w;
while(Z<z){
++Z;
if(in[w=os[Z][]]){
del(c[w]);
ins(c[w]=os[Z][]);
}
c[w]=os[Z][];
}
while(Z>z){
if(in[w=os[Z][]]){
del(c[w]);
ins(os[Z][]);
}
c[w]=os[Z][];
--Z;
}
mov(X,x);
mov(Y,y);
int g=lca(x,y);
ins(c[g]);
as[ID]=ans;
del(c[g]);
}
}qs[N];
int qp=;
int main(){
fread(buf,,sizeof(buf),stdin);
n=_();m=_();q=_();
for(int i=;i<=m;++i)v1[i]=_();
for(int i=;i<=n;++i)v2[i]=_();
for(int i=,a,b;i<n;++i){
a=_(),b=_();
e[a].push_back(b);
e[b].push_back(a);
}
for(int i=;i<=n;++i)c[i]=_();
for(int i=;i<q;++i){
int o=_(),x=_(),y=_();
if(o)qs[qp]=(Q){x,y,tk,qp},++qp;
else{
++tk;
os[tk][]=x;
os[tk][]=c[x];
os[tk][]=c[x]=y;
}
}
if(tk<=)D=sqrt(n)+;
else D=pow(n,0.67)+;
f1(,);f3(,);
std::sort(qs,qs+qp);
X=Y=,Z=tk;
for(int i=;i<qp;++i)qs[i].cal();
for(int i=;i<qp;++i)pr(as[i]);
fwrite(ob,,op-ob,stdout);
return ;
}
uoj #58【WC2013】糖果公园的更多相关文章
- [BZOJ3052][UOJ#58][WC2013]糖果公园
[BZOJ3052][UOJ#58][WC2013]糖果公园 试题描述 Candyland 有一座糖果公园,公园里不仅有美丽的风景.好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的小朋友来 ...
- BZOJ3052/UOJ#58 [wc2013]糖果公园 莫队 带修莫队 树上莫队
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ3052.html 题目传送门 - BZOJ3052 题目传送门 - UOJ#58 题意 给定一棵树,有 ...
- bzoj 3052: [wc2013]糖果公园 带修改莫队
3052: [wc2013]糖果公园 Time Limit: 250 Sec Memory Limit: 512 MBSubmit: 506 Solved: 189[Submit][Status] ...
- 洛谷 P4074 [WC2013]糖果公园 解题报告
P4074 [WC2013]糖果公园 糖果公园 树上待修莫队 注意一个思想,dfn序处理链的方法,必须可以根据类似异或的东西,然后根据lca分两种情况讨论 注意细节 Code: #include &l ...
- AC日记——[WC2013]糖果公园 cogs 1817
[WC2013]糖果公园 思路: 带修改树上莫队(模板): 来,上代码: #include <cmath> #include <cstdio> #include <cst ...
- COGS1817. [WC2013]糖果公园
1817. [WC2013]糖果公园 ★★★☆ 输入文件:park.in 输出文件:park.out 简单对比时间限制:8 s 内存限制:512 MB [题目描述] Candyland ...
- 【BZOJ3052】[wc2013]糖果公园 带修改的树上莫队
[BZOJ3052][wc2013]糖果公园 Description Input Output Sample Input Sample Input Sample Output 84 131 27 84 ...
- 【BZOJ】3052: [wc2013]糖果公园 树分块+带修改莫队算法
[题目]#58. [WC2013]糖果公园 [题意]给定n个点的树,m种糖果,每个点有糖果ci.给定n个数wi和m个数vi,第i颗糖果第j次品尝的价值是v(i)*w(j).q次询问一条链上每个点价值的 ...
- 【Luogu P4074】[WC2013]糖果公园(树上带修改莫队)
题目描述 Candyland 有一座糖果公园,公园里不仅有美丽的风景.好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的小朋友来糖果公园游玩. 糖果公园的结构十分奇特,它由 \(n\) 个游 ...
- BZOJ.3052.[WC2013]糖果公园(树上莫队 带修改莫队)
题目链接 BZOJ 当然哪都能交(都比在BZOJ交好),比如UOJ #58 //67376kb 27280ms //树上莫队+带修改莫队 模板题 #include <cmath> #inc ...
随机推荐
- search的 制作
<meta charset="utf-8"> <title>search的制作</title> <style type="te ...
- RNN-LSTM-GRU-BIRNN
https://blog.csdn.net/wangyangzhizhou/article/details/76651116 共三篇 RNN的模型展开后多个时刻隐层互相连接,而所有循环神经网络都有一个 ...
- 给Linux服务器设置共享文件目录
通过samba软件 :yum install samba 修改配置文件:vi /etc/samba/smb.conf 添加 [WORKSPACE] comment = workspace ...
- HDU1272小希的迷宫–并查集
上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了 ...
- Guava Cache 总结
想对Guava cache部分进行总结,但思索之后,文档才是最全面.详细的.所以,决定对guava文档进行翻译. 英文地址如下:https://github.com/google/guava/wiki ...
- LG1861 星之器
题意 题目背景 Magic Land 上的时间又过了若干世纪„„ 现在, 人们谈论着一个传说:从前,他们的祖先来到了一个位于东方的岛屿, 那里简直就是另外一个世界.善于分析与构造的 Magic Lan ...
- linqpad使用方法备忘
1.使用EF更新数据库 void Main() { select item).ToList(); CM_BookPages.DeleteAllOnSubmit(items); SubmitChange ...
- PyMongo 常见问题
PyMongo是线程安全的吗PyMongo是线程安全的,并且为多线程应用提供了内置的连接池 PyMongo是进程安全的吗PyMongo不是进程安全的,如果你在fork()中使用MongoClient实 ...
- 02c语言指针基础
& 用来取一个变量的地址 * 用来取一个地址的值 例如: (1)&n 获取n的地址 int *p=&n; *p就等于p的值 (2) 假设 int n=10; *(&n) ...
- Hi3520DV200和Hi3520DV300
处理器:V200---arm A9 600M主频V300---arm A7 800M主频 编码解码能力:V200---8路D1或者4路720PV300---8路D1或者4路1080p或者9路720p ...