http://uoj.ac/problem/58

树上带修莫队模板题

#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】糖果公园的更多相关文章

  1. [BZOJ3052][UOJ#58][WC2013]糖果公园

    [BZOJ3052][UOJ#58][WC2013]糖果公园 试题描述 Candyland 有一座糖果公园,公园里不仅有美丽的风景.好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的小朋友来 ...

  2. BZOJ3052/UOJ#58 [wc2013]糖果公园 莫队 带修莫队 树上莫队

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ3052.html 题目传送门 - BZOJ3052 题目传送门 - UOJ#58 题意 给定一棵树,有 ...

  3. bzoj 3052: [wc2013]糖果公园 带修改莫队

    3052: [wc2013]糖果公园 Time Limit: 250 Sec  Memory Limit: 512 MBSubmit: 506  Solved: 189[Submit][Status] ...

  4. 洛谷 P4074 [WC2013]糖果公园 解题报告

    P4074 [WC2013]糖果公园 糖果公园 树上待修莫队 注意一个思想,dfn序处理链的方法,必须可以根据类似异或的东西,然后根据lca分两种情况讨论 注意细节 Code: #include &l ...

  5. AC日记——[WC2013]糖果公园 cogs 1817

    [WC2013]糖果公园 思路: 带修改树上莫队(模板): 来,上代码: #include <cmath> #include <cstdio> #include <cst ...

  6. COGS1817. [WC2013]糖果公园

    1817. [WC2013]糖果公园 ★★★☆   输入文件:park.in   输出文件:park.out   简单对比时间限制:8 s   内存限制:512 MB [题目描述] Candyland ...

  7. 【BZOJ3052】[wc2013]糖果公园 带修改的树上莫队

    [BZOJ3052][wc2013]糖果公园 Description Input Output Sample Input Sample Input Sample Output 84 131 27 84 ...

  8. 【BZOJ】3052: [wc2013]糖果公园 树分块+带修改莫队算法

    [题目]#58. [WC2013]糖果公园 [题意]给定n个点的树,m种糖果,每个点有糖果ci.给定n个数wi和m个数vi,第i颗糖果第j次品尝的价值是v(i)*w(j).q次询问一条链上每个点价值的 ...

  9. 【Luogu P4074】[WC2013]糖果公园(树上带修改莫队)

    题目描述 Candyland 有一座糖果公园,公园里不仅有美丽的风景.好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的小朋友来糖果公园游玩. 糖果公园的结构十分奇特,它由 \(n\) 个游 ...

  10. BZOJ.3052.[WC2013]糖果公园(树上莫队 带修改莫队)

    题目链接 BZOJ 当然哪都能交(都比在BZOJ交好),比如UOJ #58 //67376kb 27280ms //树上莫队+带修改莫队 模板题 #include <cmath> #inc ...

随机推荐

  1. bulma入门

    http://www.ruanyifeng.com/blog/2017/10/bulma.html

  2. Ubuntu端口命令---查看端口占用及关闭

    Ubuntu查看端口使用情况,使用netstat命令: 查看已经连接的服务端口(ESTABLISHED) netstat -a 查看所有的服务端口(LISTEN,ESTABLISHED) netsta ...

  3. js framework comparation

    starting a new project:(finance project for p2p -- like lending club, or prosper ) ,we considering a ...

  4. 【mybatis源码学习】mybtias一级,二级缓存

    转载:https://www.cnblogs.com/ysocean/p/7342498.html mybatis 为我们提供了一级缓存和二级缓存,可以通过下图来理解: ①.一级缓存是SqlSessi ...

  5. 配置java环境变量【搭建java开发环境】【Path追加字符串,CLASSPATH填入固定的字符串】

    准备工作:把jdk压缩包解压出来 jdk的安装目录就是F:\a-bao\jdk1.8.0_65 第一步: 变量名:JAVA_HOME变量值:JDK安装路径 直接追加这些字符串 %JAVA_HOME%\ ...

  6. Python-pycurl模块的安装

    先执行以下命令(因为我在另一个终端执行,所以history的编号有重复) 7 wget https://pypi.python.org/packages/source/p/pycurl/pycurl- ...

  7. Creating Node.js Command Line Utilities to Improve Your Workflow

    转自:https://developer.telerik.com/featured/creating-node-js-command-line-utilities-improve-workflow/ ...

  8. airflow-operator 可以管理airflow 的kuberntes 自定义controller && crd

    使用airflow-operator 我们可以让airflow 可以很方便的运行在k8s集群环境中,当前还在开发中 主要分为两部分:airflowbbase && airfowclus ...

  9. 数据库与java的连接

    jdbc: java database connection,也就是java的数据库连接. 作用: 完成数据库数据和内存数据的交互. 为了屏蔽不同数据库的差异,在内存和各种数据库之间建立了一个接口标准 ...

  10. Oracle数据类型与.NET中的对应关系

    Oracle连接添加的引用不同,会存在数据类型不同以及其他一些差别,就工作中遇到的问题暂时总结下. 两种不同的添加引用语句: (1)System.Data.OracleClient; (2)Oracl ...