日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SDOI2014 旅行

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SDOI2014 旅行 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

傳送門

省選前水一發

這題一開始看標簽是主席樹……后來……這題和主席樹有啥關系……
可以想到對于每種宗教用樹剖+線段樹維護即可。然后因為空間不夠要動態開點。然后改宗教,改評級的,把原來的點刪了再插一個新點就可以了。查詢最大值,和就直接線段樹維護。
當樹剖板子練習了。

#include<bits/stdc++.h> #define rep(i,a,n) for(int i = a;i <= n;i++) #define per(i,n,a) for(int i = n;i >= a;i--) #define enter putchar('\n') #define pr pair<int,int> #define mp make_pair #define fi first #define sc second using namespace std; typedef long long ll; const int M = 100005; const int N = 2000005; const int INF = 0x3f3f3f3f;int read() {int ans = 0,op = 1;char ch = getchar();while(ch < '0' || ch > '9') {if(ch == '-') op = -1;ch = getchar();}while(ch >='0' && ch <= '9') ans = ans * 10 + ch - '0',ch = getchar();return ans * op; }int n,m,w[M],c[M],head[M],ecnt,dep[M],hson[M],top[M],idx,dfn[M],rk[M],fa[M]; int x,y,size[M],cnt,root[M],k,q; char ch[5];struct tree {int lc,rc,val,sum; }t[M<<5];struct edge {int next,to,from; }e[M<<1];void add(int x,int y){e[++ecnt] = {head[x],y,x},head[x] = ecnt;}void dfs1(int x,int f) {dep[x] = dep[f] + 1,size[x] = 1,fa[x] = f;for(int i = head[x];i;i = e[i].next){if(e[i].to == f) continue;dfs1(e[i].to,x);size[x] += size[e[i].to];if(size[e[i].to] > size[hson[x]]) hson[x] = e[i].to;} }void dfs2(int x,int t) {dfn[x] = ++idx,rk[idx] = x,top[x] = t;if(hson[x]) dfs2(hson[x],t);for(int i = head[x];i;i = e[i].next){if(e[i].to == hson[x] || e[i].to == fa[x]) continue;dfs2(e[i].to,e[i].to);} }void pushup(int p) {t[p].val = max(t[t[p].lc].val,t[t[p].rc].val);t[p].sum = t[t[p].lc].sum + t[t[p].rc].sum; } void pushdown(int p){t[p].sum = t[p].val = 0;}void insert(int &p,int l,int r,int pos,int val) {if(!p) p = ++cnt;if(l == r) {t[p].sum = t[p].val = val;return;}int mid = (l+r) >> 1;if(pos <= mid) insert(t[p].lc,l,mid,pos,val);else insert(t[p].rc,mid+1,r,pos,val);pushup(p); }void del(int &p,int l,int r,int pos) {if(!p) return;if(l == r) {pushdown(p);return;}int mid = (l+r) >> 1;if(pos <= mid) del(t[p].lc,l,mid,pos);else del(t[p].rc,mid+1,r,pos);pushup(p); }int query(int &p,int l,int r,int kl,int kr) {if(!p) return 0;if(l == kl && r == kr) return t[p].sum;int mid = (l+r) >> 1;if(kr <= mid) return query(t[p].lc,l,mid,kl,kr);else if(kl > mid) return query(t[p].rc,mid+1,r,kl,kr);else return query(t[p].lc,l,mid,kl,mid) + query(t[p].rc,mid+1,r,mid+1,kr); }int ask(int &p,int l,int r,int kl,int kr) {if(!p) return 0;if(l == kl && r == kr) return t[p].val;int mid = (l+r) >> 1;if(kr <= mid) return ask(t[p].lc,l,mid,kl,kr);else if(kl > mid) return ask(t[p].rc,mid+1,r,kl,kr);else return max(ask(t[p].lc,l,mid,kl,mid),ask(t[p].rc,mid+1,r,mid+1,kr)); }int srange(int x,int y) {int cur = 0,k = c[x];while(top[x] != top[y]){if(dep[top[x]] < dep[top[y]]) swap(x,y);cur += query(root[k],1,n,dfn[top[x]],dfn[x]);x = fa[top[x]];}if(dep[x] > dep[y]) swap(x,y);cur += query(root[k],1,n,dfn[x],dfn[y]);return cur; }int mrange(int x,int y) {int cur = 0,k = c[x];while(top[x] != top[y]){if(dep[top[x]] < dep[top[y]]) swap(x,y);cur = max(cur,ask(root[k],1,n,dfn[top[x]],dfn[x]));x = fa[top[x]];}if(dep[x] > dep[y]) swap(x,y);cur = max(cur,ask(root[k],1,n,dfn[x],dfn[y]));return cur; }int main() {n = read(),q = read();rep(i,1,n) w[i] = read(),c[i] = read();rep(i,1,n-1) x = read(),y = read(),add(x,y),add(y,x);dfs1(1,0),dfs2(1,1);rep(i,1,n) insert(root[c[i]],1,n,dfn[i],w[i]);while(q--){scanf("%s",ch);if(ch[1] == 'C'){x = read(),k = read();del(root[c[x]],1,n,dfn[x]),c[x] = k;insert(root[c[x]],1,n,dfn[x],w[x]);}if(ch[1] == 'W'){x = read(),k = read();del(root[c[x]],1,n,dfn[x]),w[x] = k;insert(root[c[x]],1,n,dfn[x],w[x]);}if(ch[1] == 'S'){x = read(),y = read();printf("%d\n",srange(x,y));}if(ch[1] == 'M'){x = read(),y = read();printf("%d\n",mrange(x,y));}}return 0; }

轉載于:https://www.cnblogs.com/captain1/p/10659250.html

總結

以上是生活随笔為你收集整理的SDOI2014 旅行的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www.蜜臀av| 神马影院一区二区 | 成人h在线观看 | 在线观看欧美日韩 | 成人四色 | 成人精品一区二区三区中文字幕 | 久久免费视频精品 | 欧美色狠| 手机av免费在线 | 欧美亚洲精品在线 | 成人久久影院 | 日本乱偷人妻中文字幕在线 | 欧美日韩电影一区二区 | 视频精品久久 | 黄av资源| 久久久久国色av免费观看性色 | 538任你躁在线精品免费 | 悠悠色综合网 | 舐め犯し波多野结衣在线观看 | 亚洲中文字幕一区二区在线观看 | 大肉大捧一进一出好爽 | 99re热在线视频 | 国产剧情在线 | 亚洲精品女人 | 激情视频免费在线观看 | 黄色免费播放 | 成人永久免费视频 | 欧美黑人性生活 | 色悠久久综合 | 国产乱淫av | 日产mv免费观看 | 亚洲精品中文字幕乱码三区91 | 国产成人精品网站 | 亚洲一区二区在线播放 | 让人下面流水的视频 | 青青伊人久久 | 成人wwxx免费观看 | 中文字幕欧美人妻精品一区蜜臀 | 日韩一区二区三区在线免费观看 | 91精品国产乱码久久久 | 免费成人看视频 | 精品国产精品三级精品av网址 | 国产欧美精品一区二区色综合朱莉 | 欧美性色黄大片手机版 | 亚洲专区在线 | 美女光屁屁露胸胸 | 婷婷综合影院 | 传媒视频在线观看 | 成人激情av | 色妞欧美| 国产三级精品三级在线观看 | 色狠狠一区二区三区香蕉 | 精品日本一区二区 | 亚洲美女免费视频 | 爱乃なみ加勒比在线播放 | 丰满女人又爽又紧又丰满 | 青青草91久久久久久久久 | 一本—道久久a久久精品蜜桃 | 在线综合网 | 麻豆视频一区二区 | 四虎影视最新网址 | www污网站 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 国产视频在 | 在线观看涩涩 | 欧美日韩国产免费 | 奇米四色777| 视频这里只有精品 | 国产chinese| 超碰激情| 中文字幕av久久 | 国产100页| 欧美高清另类 | 毛片www | 在线视频91| 精品一区在线 | 亚洲精品18在线观看 | 久草在| 国产伦精品一区二区三区四区 | 精品国产乱码久久久久久闺蜜 | 欧美精品久久久久性色 | 国产一区网站 | 国产精品久久亚洲7777 | 毛茸茸free性熟hd | 久久资源365| 欧美亚洲韩国 | 美国色视频| 中文字幕av一区二区三区谷原希美 | 亚洲成人一级片 | 色综合成人 | 三上悠亚 电影 | 边啃奶头边躁狠狠躁 | 久久亚洲AV成人无码国产人妖 | 六月丁香色婷婷 | 精彩毛片 | 欧美自拍偷拍一区 | 久久亚洲精品视频 | 日本久久成人 | 99热97|