P4074 [WC2013]糖果公园

糖果公园


树上待修莫队

注意一个思想,dfn序处理链的方法,必须可以根据类似异或的东西,然后根据lca分两种情况讨论

注意细节


Code:

#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cctype>
#define ll long long
const int N=2e5+10;
inline int read()
{
int x=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x;
}
struct modi
{
int x,y,pre;
modi(){}
modi(int x,int y,int pre){this->x=x,this->y=y,this->pre=pre;}
}dew[N];
int n,m,q,Q,Mi,l,r,Ti,V[N],W[N],C[N],las[N],B;
struct qry
{
int l,r,lp,rp,ti,ad,id;
qry(){}
qry(int L,int R,int Ti,int Ad,int Id)
{
l=L,r=R,ti=Ti,ad=Ad,id=Id;
lp=(L-1)/B+1,rp=(R-1)/B+1;
}
bool friend operator <(qry a,qry b)
{
return a.lp==b.lp?(a.rp==b.rp?a.ti<b.ti:a.rp<b.rp):a.lp<b.lp;
}
}bee[N];
int head[N],to[N],Next[N],cnt;
void add(int u,int v)
{
to[++cnt]=v,Next[cnt]=head[u],head[u]=cnt;
}
int f[N][20],dep[N],dfn[N],low[N],ha[N],dfsclock;
void dfs(int now)
{
ha[dfn[now]=++dfsclock]=now;
dep[now]=dep[f[now][0]]+1;
for(int i=1;f[now][i-1];i++) f[now][i]=f[f[now][i-1]][i-1];
for(int v,i=head[now];i;i=Next[i])
if((v=to[i])!=f[now][0])
f[v][0]=now,dfs(v);
ha[low[now]=++dfsclock]=now;
}
int LCA(int x,int y)
{
if(dep[x]<dep[y]) return LCA(y,x);
for(int i=18;~i;i--)
if(dep[f[x][i]]>=dep[y])
x=f[x][i];
if(x==y) return x;
for(int i=18;~i;i--)
if(f[x][i]!=f[y][i])
x=f[x][i],y=f[y][i];
return f[x][0];
}
int tag[N],ct[N];
ll Ans[N],ans;
void ins(int p){ans+=1ll*W[++ct[C[p]]]*V[C[p]];}
void del(int p){ans-=1ll*W[ct[C[p]]--]*V[C[p]];}
void upd(int p)
{
if(tag[p]) del(p);
else ins(p);
tag[p]^=1;
}
void rig(int T)
{
int p=dew[T].x;
if(!tag[p]) {C[p]=dew[T].y;return;}
del(p);
C[p]=dew[T].y;
ins(p);
}
void lef(int T)
{
int p=dew[T].x;
if(!tag[p]) {C[p]=dew[T].pre;return;}
del(p);
C[p]=dew[T].pre;
ins(p);
}
int main()
{
n=read(),m=read(),q=read();
for(int i=1;i<=m;i++) V[i]=read();//第i种权值V_i
for(int i=1;i<=n;i++) W[i]=read();//第i次吃某种权值为W_i
for(int u,v,i=1;i<n;i++) u=read(),v=read(),add(u,v),add(v,u);
dfs(1);
for(int i=1;i<=n;i++) las[i]=C[i]=read();//种类为C_i
B=pow(1.0*dfsclock,2.0/3.0)+1;
for(int ty,x,y,i=1;i<=q;i++)
{
ty=read(),x=read(),y=read();
if(ty)//qry
{
if(dfn[x]>dfn[y]) std::swap(x,y);
int lca=LCA(x,y);++Q;
if(x==lca) bee[Q]=qry(dfn[x],dfn[y],Mi,0,Q);
else bee[Q]=qry(low[x],dfn[y],Mi,lca,Q);
}
else
dew[++Mi]=modi(x,y,las[x]),las[x]=y;
}
std::sort(bee+1,bee+1+Q);
for(int i=1;i<=Q;i++)
{
while(l<bee[i].l) upd(ha[l++]);
while(l>bee[i].l) upd(ha[--l]);
while(r<bee[i].r) upd(ha[++r]);
while(r>bee[i].r) upd(ha[r--]);
while(Ti<bee[i].ti) rig(++Ti);
while(Ti>bee[i].ti) lef(Ti--);
if(bee[i].ad) ins(bee[i].ad);
Ans[bee[i].id]=ans;
if(bee[i].ad) del(bee[i].ad);
}
for(int i=1;i<=Q;i++) printf("%lld\n",Ans[i]);
return 0;
}

2019.1.30

洛谷 P4074 [WC2013]糖果公园 解题报告的更多相关文章

  1. Machine Learning Codeforces - 940F(带修莫队) && 洛谷P4074 [WC2013]糖果公园

    以下内容未验证,有错请指正... 设块大小为T,则块数为$\frac{n}{T}$ 将询问分为$(\frac{n}{T})^2$块(按照左端点所在块和右端点所在块分块),同块内按时间从小到大依次处理 ...

  2. 洛谷P4074 [WC2013]糖果公园(莫队)

    传送门 总算会树形莫队了…… 上次听说树形莫队是给树分块,实在看不懂.然后用括号序列的方法做总算能弄明白了 先说一下什么是括号序列,就是在$dfs$的时候,进入的时候记录一下,出去的时候也记录一下 拿 ...

  3. [洛谷P4074][WC2013]糖果公园

    题目大意:给一棵$n$个节点的树,每个点有一个值$C_i$,每次询问一条路径$x->y$,求$\sum\limits_{c}val_c\times \sum\limits_{i=1}^{cnt_ ...

  4. 洛谷 P2195 HXY造公园 解题报告

    P2195 HXY造公园 题目描述 现在有一个现成的公园,有\(n\)个休息点和\(m\)条双向边连接两个休息点.众所周知,\(HXY\)是一个\(SXBK\)的强迫症患者,所以她打算施展魔法来改造公 ...

  5. 洛谷_Cx的故事_解题报告_第四题70

    1.并查集求最小生成树 Code: #include <stdio.h> #include <stdlib.h>   struct node {     long x,y,c; ...

  6. 洛谷 P2317 [HNOI2005]星际贸易 解题报告

    P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...

  7. 洛谷 P3802 小魔女帕琪 解题报告

    P3802 小魔女帕琪 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组合,从 ...

  8. 洛谷 P2606 [ZJOI2010]排列计数 解题报告

    P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...

  9. 洛谷1303 A*B Problem 解题报告

    洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...

随机推荐

  1. Angularjs 地址联动2.1.1

    这个地址联动是基于 Angularjs 的 效果图如下: 看着是不是可美观了?哈哈!源码如下: <!DOCTYPE HTML> <html lang="zh-CN" ...

  2. NOI Day1线上同步赛梦游记

    Preface 第一次体验NOI,虽然不是正式选手,但是打打同步赛还是挺涨姿势的,也算是体验了一把. Day1很爆炸,一方面是NOI题目的难度高于自身的水平,另一方面也出现了比较大的失误,T1一个数组 ...

  3. Intel x86_64 Architecture Background 3

    多层次的cache结构解决了CPU和DRAM之间处理速度不一致的问题,在Intel体系架构下,CPU核心和主存DRAM之间有着三层的cache.其中一层缓存L1和二层缓存L2在CPU核心(core)中 ...

  4. koa2入门(2) koa-router 路由处理

    项目地址:https://github.com/caochangkui/demo/tree/koa-test 1. 创建项目 创建目录 koa-test npm init 创建 package.jso ...

  5. BGFX 渲染引擎中着色器代码的调试方法

    在实时渲染的图形开发中,着色器代码(Shader)越来越复杂,于是单纯的靠经验和不断试错的开发和调试方法早已不能满足实际需求.使用调试工具进行调试,成为开发中重要的方法.Bgfx 是一款跨平台.抽象封 ...

  6. HDU-6440-费马小定理

    亏我前几天还学数论呢...没有深入研究费马小定理这个东西...做事情一定要静下心来啊... 题目要求满足(m+n)^p=m^p+n^p,要你定义一个封闭的新的加法和乘法运算 我们知道费马小定理中有两种 ...

  7. Pair Project 1 elevator

    结对编程——电梯调度 12061181 高孟烨 12061182 郝倩 1.结对编程的优缺点: 优点:结对编程可以结合两个人各自擅长之地,充分发挥两个人各自的优势,两个人一起合作效率会更高.一份工作两 ...

  8. SCRUM 12.20

    以下为我们爬虫遇到问题的报告 我们团队的m2阶段原本计划是爬取美团的信息以支持我们的app对比功能,但在这一阶段遇到很多问题,主要表现如下: 美团反爬机制: 由于我们团队人员在事先并不知道美团具有反爬 ...

  9. 【转】CSS颜色代码大全

    转自http://www.cnblogs.com/axing/archive/2011/04/09/CSS.html FFFFFF #DDDDDD #AAAAAA #888888 #666666 #4 ...

  10. Activiti流程编辑器针对自定义用户角色表优化改造

    本文目的: 针对自定义的用户.角色表,对Activiti的在线流程设计器进行优化改造,使之能直接在图形界面上完成对节点办理人.候选人.候选组的配置,不需要先去查数据库中的用户ID.角色ID等信息再填入 ...