【WC2013】糖果公园
Candyland 有一座糖果公园,公园里不仅有美丽的风景、好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的小朋友来糖果公园玩。
糖果公园的结构十分奇特,它由 nn 个游览点构成,每个游览点都有一个糖果发放处,我们可以依次将游览点编号为 11 至 nn。有 n−1n−1 条双向道路连接着这些游览点,并且整个糖果公园都是连通的,即从任何一个游览点出发都可以通过这些道路到达公园里的所有其它游览点。
糖果公园所发放的糖果种类非常丰富,总共 mm 种,它们的编号依次为 11 至 mm。每一个糖果发放处都只发放某种特定的糖果,我们用 cici 来表示 ii 号游览点的糖果。
来到公园里游玩的游客都不喜欢走回头路,他们总是从某个特定的游览点出发前往另一个特定的游览点,并游览途中的景点,这条路线一定是唯一的。他们经过每个游览点,都可以品尝到一颗对应种类的糖果。
大家对不同类型的糖果的喜爱程度都不尽相同。根据游客们的反馈打分,我们得到了糖果的美味指数,第 ii 种糖果的美味指数为 vivi。另外,如果一位游客反复地品尝同一种类的糖果,他肯定会觉得有一些腻。根据量化统计,我们得到了游客第 ii 次品尝某类糖果的新奇指数 wiwi,如果一位游客第 ii 次品尝第 jj 种糖果,那么他的愉悦指数 HH 将会增加对应的美味指数与新奇指数的乘积,即 vjwivjwi。这位游客游览公园的愉悦指数最终将是这些乘积的和。
当然,公园中每个糖果发放点所发放的糖果种类不一定是一成不变的。有时,一些糖果点所发放的糖果种类可能会更改(也只会是 mm 种中的一种),这样的目的是能够让游客们总是感受到惊喜。
糖果公园的工作人员小 A 接到了一个任务,那就是根据公园最近的数据统计出每位游客游玩公园的愉悦指数。但数学不好的小 A 一看到密密麻麻的数字就觉得头晕,作为小 A 最好的朋友,你决定帮他一把。
输入格式
第一行包含三个正整数 n,m,qn,m,q,分别表示游览点个数、糖果种类数和操作次数。
第二行包含 mm 个正整数 v1,v2,…,vmv1,v2,…,vm。
第三行包含 nn 个正整数 w1,w2,…,wnw1,w2,…,wn。
第四行到第 n+2n+2 行,每行包含两个正整数 ai,biai,bi,表示这两个游览点之间有路径可以直接到达。
第 n+3n+3 行包含 nn 个正整数 c1,c2,…,cnc1,c2,…,cn。
接下来 qq 行,每行包含三个整数 t,x,yt,x,y,表示一次操作:
若 tt 为 00,则 1≤x≤n1≤x≤n,1≤y≤m1≤y≤m,表示编号为 xx 的游览点发放的糖果类型改为 yy;
若 tt 为 11,则 1≤x,y≤n1≤x,y≤n,表示对出发点为 xx,终止点为 yy 的路线询问愉悦指数。
输出格式
按照输入的先后顺序,对于每个 tt 为 11 的操作输出一行,用一个正整数表示答案。
样例一
input
4 3 5
1 9 2
7 6 5 1
2 3
3 1
3 4
1 2 3 2
1 1 2
1 4 2
0 2 1
1 1 2
1 4 2
output
84
131
27
84 bzoj没有权限号的小朋友只能去uoj辣!
树上莫队,我是先膜的黄学长代码才会写的……
然后压了几发常数,都没有第一次交快 =_= 天生自带大常数。。。
#include<cstdio>
#include<algorithm>
#define ll long long
#define M 100001
using namespace std;
int read_p,read_ca;
inline int read(){
read_p=;read_ca=getchar();
while(read_ca<''||read_ca>'') read_ca=getchar();
while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
return read_p;
}
int n,m,c[M],p[M],to=,fa[M][],l[M],d[M],num=,nm=,knm=,be[M],de[M],q,nas=,nch=,pre[M],ti[M];
ll an=,ans[M],v[M],w[M];
bool vi[M];
struct na{
int y,ne;
}b[*M+];
const int ku=;
inline void in(int x,int y){
b[++num].y=y;b[num].ne=l[x];l[x]=num;
b[++num].y=x;b[num].ne=l[y];l[y]=num;
}
inline void dfs(int x){
int i;
for (i=;i<=;i++)
if (fa[fa[x][i-]][i-]) fa[x][i]=fa[fa[x][i-]][i-];else break;
int bo=to;
d[x]=++nm;
for (i=l[x];i;i=b[i].ne)
if (!de[b[i].y]){
de[b[i].y]=de[x]+;
fa[b[i].y][]=x;
dfs(b[i].y);
if (to-bo>=ku){
knm++;
while (to!=bo) be[p[to--]]=knm;
}
}
p[++to]=x;
}
struct ask{
int x,y,t,id;
}ba[M];
struct as{
int x,y,p;
}bc[M];
inline bool cmp(ask x,ask y){
if (be[x.x]==be[y.x]) return d[x.y]<d[y.y];
return be[x.x]<be[y.x];
}
inline void xo(int x){if (vi[x]) an-=w[ti[c[x]]]*v[c[x]],ti[c[x]]--;else ti[c[x]]++,an+=w[ti[c[x]]]*v[c[x]];vi[x]^=;}
inline void work(int x,int y){while (x!=y) if (de[x]>de[y]) xo(x),x=fa[x][];else xo(y),y=fa[y][];}
inline void cha(int x,int y){if (vi[x]) xo(x),c[x]=y,xo(x);else c[x]=y;}
inline int lca(int x,int y){
if (de[x]<de[y]) swap(x,y);
for (int i=;i>=;i--)
if (de[fa[x][i]]>=de[y]&&fa[x][i]) x=fa[x][i];
for (int i=;i>=;i--)
if (fa[x][i]!=fa[y][i]&&fa[x][i]&&fa[y][i]) x=fa[x][i],y=fa[y][i];
if (x==y) return x;
return fa[x][];
}
int main(){
int i,o,x,y,j;
n=read();m=read();q=read();
for (i=;i<=m;i++) v[i]=read();
for (i=;i<=n;i++) w[i]=read();
for (i=;i<n;i++) in(read(),read());
for (i=;i<=n;i++) pre[i]=c[i]=read();
de[]=;
dfs();
for (i=;i<=q;i++){
o=read();x=read();y=read();
if (o){
if (d[x]>d[y]) swap(x,y);
nas++;
ba[nas].x=x;ba[nas].y=y;ba[nas].t=nch;ba[nas].id=nas;
}else{
nch++;
bc[nch].x=x;bc[nch].y=y;bc[nch].p=pre[x];pre[x]=y;
}
}
sort(ba+,ba++nas,cmp);
for (i=;i<=ba[].t;i++) cha(bc[i].x,bc[i].y);
work(ba[].x,ba[].y);
o=lca(ba[].x,ba[].y);
xo(o);ans[ba[].id]=an;xo(o);
for (i=;i<=nas;i++){
for (j=ba[i-].t+;j<=ba[i].t;j++) cha(bc[j].x,bc[j].y);
for (j=ba[i-].t;j>ba[i].t;j--) cha(bc[j].x,bc[j].p);
work(ba[i-].x,ba[i].x);
work(ba[i-].y,ba[i].y);
o=lca(ba[i].x,ba[i].y);
xo(o);ans[ba[i].id]=an;xo(o);
}
for (i=;i<=nas;i++) printf("%lld\n",ans[i]);
}
【WC2013】糖果公园的更多相关文章
- 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 ...
- [BZOJ3052][UOJ#58][WC2013]糖果公园
[BZOJ3052][UOJ#58][WC2013]糖果公园 试题描述 Candyland 有一座糖果公园,公园里不仅有美丽的风景.好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的小朋友来 ...
- 【BZOJ】3052: [wc2013]糖果公园 树分块+带修改莫队算法
[题目]#58. [WC2013]糖果公园 [题意]给定n个点的树,m种糖果,每个点有糖果ci.给定n个数wi和m个数vi,第i颗糖果第j次品尝的价值是v(i)*w(j).q次询问一条链上每个点价值的 ...
- 【Luogu P4074】[WC2013]糖果公园(树上带修改莫队)
题目描述 Candyland 有一座糖果公园,公园里不仅有美丽的风景.好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的小朋友来糖果公园游玩. 糖果公园的结构十分奇特,它由 \(n\) 个游 ...
- BZOJ3052:[WC2013]糖果公园(树上莫队)
Description Input Output Sample Input 4 3 51 9 27 6 5 12 33 13 41 2 3 21 1 21 4 20 2 11 1 21 4 2 Sam ...
- P4074 [WC2013]糖果公园 树上莫队带修改
题目链接 Candyland 有一座糖果公园,公园里不仅有美丽的风景.好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的小朋友来糖果公园游玩. 糖果公园的结构十分奇特,它由 nn 个游览点构 ...
随机推荐
- 插入光盘,创建挂载点,挂载设备,安装rpm包,升级rpm包,卸载rpm包,查询rpm包是否安装,查询rpm包信息、安装位置,查询系统文件名属于哪个安装包
插入光盘: 创建挂载点: 创建挂载点. 挂载设备:或者mount /dev/sr0 /mnt/cdrom 安装rpm包: [root@localhost Packages]# rpm -ivh mys ...
- DataBase MongoDB高级知识
MongoDB高级知识 一.mongodb适合场景: 1.读写分离:MongoDB服务采用三节点副本集的高可用架构,三个数据节点位于不同的物理服务器上,自动同步数据.Primary和Secondary ...
- [置顶]
echarts x轴文字显示不全(xAxis文字倾斜比较全面的3种做法值得推荐)
echarts x轴标签文字过多导致显示不全 如图: 解决办法1:xAxis.axisLabel 属性 axisLabel的类型是object ,主要作用是:坐标轴刻度标签的相关设置.(当然yAxis ...
- Fragment生命周期及实现点击导航图片切换fragment,Demo
PS:Fragment简介 Fragment是Android3.0后引入的一个新的API,他出现的初衷是为了适应大屏幕的平板电脑, 当然现在他仍然是平板APP UI设计的宠儿,而且我们普通手机开发也会 ...
- fdisk 命令详解
fdisk 作用: 查看磁盘实体使用情况,也可对硬盘分区. 选项: -b 分区大小 -l 列出指定的外围设备的分区表状况 -s 分区编号, 将指定的分区大小输出到标准输出上, 单位为区块 -u ...
- Java后端程序员都做些什么?
这个问题来自于QQ网友,一句两句说不清楚,索性写个文章. 我刚开始做Web开发的时候,根本没有前端,后端之说. 原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求,实现业务逻辑,访问数据库, ...
- 【bird-java】bird-java概述
bird-java是以dubbo为基础的分布式服务框架,专注于业务开发,提炼后台应用中的经典业务场景,大幅减少开发编码量. 技术选型 基础框架:spring 服务调度:dubbo web层:sprin ...
- 基于MATLAB的中值滤波均值滤波以及高斯滤波的实现
基于MATLAB的中值滤波均值滤波以及高斯滤波的实现 作者:lee神 1. 背景知识 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. 中值滤 ...
- Webpack 2 视频教程 015 - Webpack 2 中的文件压缩
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...
- JavaScript函数补完:toString()
javascript中的toString()方法,主要用于Array.Boolean.Date.Error.Function.Number等对象.下面是这些方法的一些解析和简单应用,做个纪律,以作备忘 ...