网站你应该知道我说的是什么吧,wordpress分类目录查不到文章,减少wordpress响应时间,短视频seo营销系统正题
题目链接:https://www.luogu.com.cn/problem/P4074 题目大意 nnn个点的一颗数#xff0c;第iii个点有一颗cic_ici种类的糖。
第iii次获得jjj种类的糖可以产生价值wi∗vjw_i*v_jwi∗vj。
每次操作
修改一个点的糖果种类询问一个路径的价值和 解题思路
用欧拉序…正题
题目链接:https://www.luogu.com.cn/problem/P4074 题目大意
nnn个点的一颗数第iii个点有一颗cic_ici种类的糖。
第iii次获得jjj种类的糖可以产生价值wi∗vjw_i*v_jwi∗vj。
每次操作
修改一个点的糖果种类询问一个路径的价值和 解题思路
用欧拉序可以做到在树上进行莫队然后带修即可。 codecodecode
#includecstdio
#includecstring
#includealgorithm
#includecmath
#define ll long long
using namespace std;
const ll N2e510;
struct q_node{ll id,t,l,r;
}q[N];
struct node{ll to,next;
}a[N*2];
ll n,m,Q,T,cnt,tot,answer;
ll v[N],w[N],c[N],ans[N],ls[N];
ll cho[N],cval[N],pre[N];
ll dfn[N],rfn[N],ed[N],ok[N];
ll f[N][21],dep[N],vis[N];
bool operator(q_node x,q_node y){if(x.l/T!y.l/T)return x.l/Ty.l/T;if(x.r/T!y.r/T)return x.r/Ty.r/T;return x.t/Ty.t/T;
}
void addl(ll x,ll y){a[tot].toy;a[tot].nextls[x];ls[x]tot;return;
}
void dfs(ll x,ll fa){dfn[cnt]x;rfn[x]cnt;for(ll ils[x];i;ia[i].next){ll ya[i].to;if(yfa)continue;f[y][0]x;dep[y]dep[x]1; dfs(y,x);}dfn[cnt]x;ed[x]cnt;
}
void ycl(){for(ll i1;i20;i)for(ll j1;jn;j)f[j][i]f[f[j][i-1]][i-1];return;
}
ll LCA(ll x,ll y){if(dep[y]dep[x])swap(x,y);for(ll i20;i0;i--)if(dep[f[x][i]]dep[y])xf[x][i];if(xy)return x;for(ll i20;i0;i--)if(f[y][i]!f[x][i])xf[x][i],yf[y][i];return f[x][0];
}
void rev(ll x){int kc[x];if(ok[x])answer-w[vis[k]]*v[k],vis[k]--;else vis[k],answerw[vis[k]]*v[k];ok[x]^1;return;
}
void keep(ll l,ll r,ll t,ll L,ll R,ll T){while(lL)rev(dfn[l]),l;while(lL)l--,rev(dfn[l]);while(rR)r,rev(dfn[r]);while(rR)rev(dfn[r]),r--;while(tT){t;ll xcho[t],flag0;if(ok[x])rev(x),flag1;swap(c[x],cval[t]);if(flag)rev(x);}while(tT){ll xcho[t],flag0;if(ok[x])rev(x),flag1;swap(c[x],cval[t]);if(flag)rev(x);t--;}
}
int main()
{scanf(%lld%lld%lld,n,m,Q);for(ll i1;im;i)scanf(%lld,v[i]);for(ll i1;in;i)scanf(%lld,w[i]);for(ll i1;in;i){ll x,y;scanf(%lld%lld,x,y);addl(x,y);addl(y,x);}for(ll i1;in;i)scanf(%lld,c[i]);dep[1]1;dfs(1,0);ycl();cnttot0;for(ll i1;iQ;i){ll op,x,y;scanf(%lld,op);if(op0){tot;scanf(%lld%lld,cho[tot],cval[tot]);}else{scanf(%lld%lld,x,y);if(rfn[x]rfn[y])swap(x,y);int lcaLCA(x,y);if(lcax||lcay)xrfn[x],yrfn[y];else xed[x],yrfn[y];q[cnt](q_node){cnt,tot,x,y};}}Tpow(n,2.0/3);sort(q1,q1cnt);ll l1,r0,t0;for(ll i1;icnt;i){ll xq[i].l,yq[i].r;keep(l,r,t,x,y,q[i].t);ll lcaLCA(dfn[x],dfn[y]),flag0;if(dfn[x]!lcadfn[y]!lca){flag1;vis[c[lca]];answerw[vis[c[lca]]]*v[c[lca]];}ans[q[i].id]answer;if(flag){answer-w[vis[c[lca]]]*v[c[lca]];vis[c[lca]]--;}}for(ll i1;icnt;i)printf(%lld\n,ans[i]);
}