Description

P4074 [WC2013]糖果公园 - 洛谷 | 计算机科学教育新生态

Solution

树上莫队 && 带修莫队.

[模板] 各种莫队

代码

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
using namespace std;
#define rep(i,l,r) for(register int i=(l);i<=(r);++i)
#define repdo(i,l,r) for(register int i=(l);i>=(r);--i)
#define il inline
typedef double db;
typedef long long ll;//---------------------------------------
const int nsz=1e5+50,msz=1e5+50,qsz=1e5+50;
int n,m,nq,v[msz],w[nsz],blk;struct te{int t,pr;}edge[nsz*2];
int hd[nsz],pe=1;
void adde(int f,int t){edge[++pe]=(te){t,hd[f]};hd[f]=pe;}
void adddb(int f,int t){adde(f,t);adde(t,f);}int vis[nsz],eul[nsz*3],peu=0,d[nsz];
int in[nsz],out[nsz],seq[nsz*2],ps=0;
int l2n[nsz*3],stt[20][nsz*3];void dfs(int p,int fa){seq[++ps]=p,in[p]=ps;eul[++peu]=p,vis[p]=peu;d[p]=d[fa]+1;for(int i=hd[p],v;i;i=edge[i].pr){v=edge[i].t;if(v==fa)continue;dfs(v,p);eul[++peu]=p;}seq[++ps]=p,out[p]=ps;
}int dmin(int a,int b){return d[a]<d[b]?a:b;}
void sttinit(){dfs(1,0);int l=0;rep(i,1,peu)l2n[i]=(i==(1<<(l+1)))?++l:l;rep(i,1,peu)stt[0][i]=eul[i];rep(i,1,l2n[peu]){repdo(j,peu-(1<<i)+1,1){stt[i][j]=dmin(stt[i-1][j],stt[i-1][j+(1<<(i-1))]);}}
}
int rmq(int a,int b){if(a>b)swap(a,b);int l=l2n[b-a+1];return dmin(stt[l][a],stt[l][b-(1<<l)+1]);
}
int lca(int a,int b){return rmq(in[a],in[b]);}int inb[nsz*2];
int col[nsz],now[nsz],get[nsz],cnt[nsz];
ll ans[qsz],ans0=0;
int pq=0,pc=0;
struct tq{int l,r,t,id;}q[qsz];
struct tc{int p,f,t;}c[qsz];
bool cmp(tq l,tq r){return inb[l.l]!=inb[r.l]?inb[l.l]<inb[r.l]:inb[l.r]!=inb[r.r]?inb[l.r]<inb[r.r]:l.t<r.t;}
void addq(int l,int r){if(in[l]>in[r])swap(l,r);++pq,q[pq]=(tq){lca(l,r)==l?in[l]:out[l],in[r],pc,pq};
}void solp(int p){if(get[p])ans0-=(ll)w[cnt[col[p]]--]*v[col[p]];else ans0+=(ll)w[++cnt[col[p]]]*v[col[p]];get[p]^=1;
}
void solc(int p,int c){if(get[p])solp(p),col[p]=c,solp(p);else col[p]=c;
}void mo(){sort(q+1,q+pq+1,cmp);int t=0,l=1,r=0;rep(i,1,pq){while(t<q[i].t)++t,solc(c[t].p,c[t].t);while(t>q[i].t)solc(c[t].p,c[t].f),--t;while(l<q[i].l)solp(seq[l++]);while(l>q[i].l)solp(seq[--l]);while(r<q[i].r)solp(seq[++r]);while(r>q[i].r)solp(seq[r--]);int x=seq[l],y=seq[r],lc=lca(x,y);if(x!=lc&&r!=lc)solp(lc),ans[q[i].id]=ans0,solp(lc);else ans[q[i].id]=ans0;}
}int main(){ios::sync_with_stdio(0),cin.tie(0);cin>>n>>m>>nq;rep(i,1,m)cin>>v[i];rep(i,1,n)cin>>w[i];int a,b,c;rep(i,1,n-1)cin>>a>>b,adddb(a,b);rep(i,1,n)cin>>col[i],now[i]=col[i];sttinit();blk=pow(n,2.0/3);rep(i,1,ps)inb[i]=(i-1)/blk+1;rep(i,1,nq){cin>>a>>b>>c;if(a==0)::c[++pc]=(tc){b,now[b],c},now[b]=c;else addq(b,c);}mo();rep(i,1,pq)cout<<ans[i]<<'\n';return 0;
}

转载于:https://www.cnblogs.com/ubospica/p/10276897.html

luogu4074-[WC2013]糖果公园相关推荐

  1. LG P4074 [WC2013] 糖果公园(带修莫队,树上莫队)

    LG P4074 [WC2013] 糖果公园 Solution 树上带修莫队,主要还是复习带修莫队和树上莫队. 带修莫队: 带修莫队要先对lll分块的序号作为第一关键字,对rrr分块的序号作为第二关键 ...

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

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

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

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

  4. [WC2013]糖果公园

    Description 题库链接 给你一棵 $n$ 个节点,有 $m$种颜色的树.每个节点上有一个颜色.定义一条树上路径的价值为 $sum_c V_c(\sum_{i=1}^{tim_c}W_i)$ ...

  5. UOJ58 【WC2013】糖果公园

    UOJ58 [WC2013]糖果公园 蒟蒻学个树上莫队都要学一晚上 树上莫队是依照dfs序的,将不过在点遍历完所有儿子后还要再进行一次打时间戳. 用这种方法,再特判一下LCA就好了. 网上的大多数方法 ...

  6. uoj#58./bzoj3052 【WC2013】糖果公园 //树上带修改莫队

    uoj#58. [WC2013]糖果公园 题意 有一棵N(<=1e5)个点的树,每个点对应M(<=1e5)种糖果中的一种. 一条路径的权值定义为∑i(Vi∗∑tij=1Wj)\sum_i ...

  7. 【WC2013】糖果公园 树上莫队

    树上莫队,将树分块,以x,y为一二关键字,以时间为第三关键字.暴力修改. #include <iostream> #include <cstdio> #include < ...

  8. P4074-[WC2013]糖果公园【树上带修莫队】

    正题 题目链接:https://www.luogu.com.cn/problem/P4074 题目大意 nnn个点的一颗数,第iii个点有一颗cic_ici​种类的糖. 第iii次获得jjj种类的糖可 ...

  9. YBTOJ洛谷P4074:糖果公园(树上莫队)

    文章目录 解析 update: 代码 所谓树上莫队,就是在树上的莫队 (逃) 传送门 解析 似乎就是树上的这道题 考虑如何转化为序列问题呢? 考虑dfs序 但是又一个问题... 似乎这条链的dfs序不 ...

最新文章

  1. Python训练营2021:构建8个真实世界的Python项目
  2. 自动化测试框架:几行代码轻松解决Appium环境问题
  3. Struts 学习笔记1 -Struts Framework 概览
  4. 世界杯直播“三分天下”,视频平台如何实现高清直播?
  5. C语言学习之购房从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少月能还清。
  6. yii2通过url访问类中的方法_行为型设计模式 访问者模式
  7. Python工作笔记-dictionary的遍历以及enumerate使用以及Py3中has_key的替代
  8. [BZOJ 2659] [Beijing wc2012] 算不出的算式
  9. 移动端开发语言的未来的猜想#华为云·寻找黑马程序员#
  10. 正则表达式及常用大全
  11. python菜鸟教程 | if else 判断
  12. iphone13怎么安装双卡(双卡功能)
  13. 忽忽,抢楼机完成……
  14. hibernatexml方式和注解方式实现单实体映射和继承关系映射,eclipse实现
  15. 《人人都是架构师》总结
  16. 带着问题学 Kubernetes 抽象对象 Service 服务间调用
  17. 苹果蓝牙日志如何获取
  18. 基于java的坦克大战游戏-计算机毕业设计
  19. 这篇 Linux 总结的很棒啊!
  20. 学习数学建模算法与应用【数据预处理】

热门文章

  1. out.print 嵌套html代码_Shiny与HTML
  2. python grpc_python中grpc的使用示例
  3. win7关闭开机启动项_电脑开机全是各种广告?来看看我怎么解决的吧
  4. 用JS验证asp.net服务端控件
  5. 内存溢出分析之工具篇
  6. 浅谈 PHP 与手机 APP 开发(API 接口开发)
  7. 当城市实现完全自动驾驶,车该怎么开?人该怎么走?
  8. java非递归方式实现快速排序
  9. ENode 1.0 - 整体架构介绍
  10. IDC对SIEM市场的估测