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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

BZOJ3589 动态树(树链剖分+容斥原理)

發布時間:2024/4/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ3589 动态树(树链剖分+容斥原理) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  顯然容斥后轉化為求樹鏈的交。這個題非常良心的保證了查詢的路徑都是到祖先的,求交就很休閑了。

#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long long #define N 200010 #define ui unsigned int #define inf ((ui)4294967295) #define p31 2147483647 char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;} int gcd(int n,int m){return m==0?n:gcd(m,n%m);} int read() {int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f; } int n,p[N],fa[N],deep[N],son[N],size[N],top[N],dfn[N],L[N<<2],R[N<<2],u[6],v[6],flag[6],k,cnt,t; ui tree[N<<2],lazy[N<<2],ans; struct data{int to,nxt; }edge[N<<1]; void addedge(int x,int y){t++;edge[t].to=y,edge[t].nxt=p[x],p[x]=t;} void dfs1(int k) {size[k]=1;for (int i=p[k];i;i=edge[i].nxt)if (edge[i].to!=fa[k]){fa[edge[i].to]=k;deep[edge[i].to]=deep[k]+1;dfs1(edge[i].to);size[k]+=size[edge[i].to];if (size[edge[i].to]>size[son[k]]) son[k]=edge[i].to;} } void dfs2(int k,int from) {dfn[k]=++cnt;top[k]=from;if (son[k]) dfs2(son[k],from);for (int i=p[k];i;i=edge[i].nxt)if (edge[i].to!=fa[k]&&edge[i].to!=son[k]) dfs2(edge[i].to,edge[i].to); } void build(int k,int l,int r) {L[k]=l,R[k]=r;if (l==r) return;int mid=l+r>>1;build(k<<1,l,mid);build(k<<1|1,mid+1,r); } void up(int k){tree[k]=tree[k<<1]+tree[k<<1|1];} void update(int k,ui x){tree[k]+=(R[k]-L[k]+1)*x,lazy[k]+=x;} void down(int k){update(k<<1,lazy[k]),update(k<<1|1,lazy[k]),lazy[k]=0;} void add(int k,int l,int r,ui x) {if (L[k]==l&&R[k]==r){update(k,x);return;}if (lazy[k]) down(k);int mid=L[k]+R[k]>>1;if (r<=mid) add(k<<1,l,r,x);else if (l>mid) add(k<<1|1,l,r,x);else add(k<<1,l,mid,x),add(k<<1|1,mid+1,r,x);up(k); } ui query(int k,int l,int r) {if (L[k]==l&&R[k]==r) return tree[k];if (lazy[k]) down(k);int mid=L[k]+R[k]>>1;if (r<=mid) return query(k<<1,l,r);else if (l>mid) return query(k<<1|1,l,r);else return query(k<<1,l,mid)+query(k<<1|1,mid+1,r); } ui sum(int x,int y) {ui ans=0;while (top[x]!=top[y]){if (deep[top[x]]<deep[top[y]]) swap(x,y);ans+=query(1,dfn[top[x]],dfn[x]);x=fa[top[x]];}if (deep[x]<deep[y]) swap(x,y);ans+=query(1,dfn[y],dfn[x]);return ans; } int lca(int x,int y) {while (top[x]!=top[y]){if (deep[top[x]]<deep[top[y]]) swap(x,y);x=fa[top[x]];}if (deep[x]<deep[y]) swap(x,y);return y; } bool in(int x,int y){return dfn[x]<=dfn[y]&&dfn[x]+size[x]-1>=dfn[y];} void calc(int op) {int x=0,y=0;for (int i=1;i<=k;i++)if (flag[i]){if (!x) x=u[i],y=v[i];else{int p=u[i],q=v[i];if (deep[x]>deep[p]) swap(x,p),swap(y,q);if (in(x,p)&&in(p,y)) x=p,y=lca(y,q);else return;}}if (x==0) return;else if (op>0) ans+=sum(x,y);else ans+=inf-sum(x,y)+1; } void dfs(int cur,int op) {if (cur>k) {calc(op);return;}flag[cur]=1;dfs(cur+1,-op);flag[cur]=0;dfs(cur+1,op); } int main() { #ifndef ONLINE_JUDGEfreopen("bzoj3589.in","r",stdin);freopen("bzoj3589.out","w",stdout);const char LL[]="%I64d\n"; #elseconst char LL[]="%lld\n"; #endifn=read();for (int i=1;i<n;i++){int x=read(),y=read();addedge(x,y),addedge(y,x);}dfs1(1);dfs2(1,1);build(1,1,n);int m=read();while (m--){int op=read();if (op==0){int x=read(),y=read();add(1,dfn[x],dfn[x]+size[x]-1,y);}if (op==1) {k=read();ans=0;for (int i=1;i<=k;i++) u[i]=read(),v[i]=read();for (int i=1;i<=k;i++) if (dfn[u[i]]>dfn[v[i]]) swap(u[i],v[i]);dfs(1,-1);printf("%u\n",ans&p31);}}return 0; }

?

?

轉載于:https://www.cnblogs.com/Gloid/p/10289789.html

總結

以上是生活随笔為你收集整理的BZOJ3589 动态树(树链剖分+容斥原理)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: cao在线| 久草资源福利 | 亚洲一区免费在线观看 | 日本韩国在线播放 | 日本aa大片| 九九精品免费 | 小优视频污 | 亚洲精品123区 | 用我的手指扰乱你 | 波多野结衣办公室双飞 | 三级影片在线播放 | 自拍亚洲一区 | 99久久视频| 久久99精品久久只有精品 | 自拍偷拍1 | 欧美高清视频一区二区 | 91视频在线免费观看 | 亚洲视频在线一区 | 免费午夜视频在线观看 | 亚洲天堂自拍偷拍 | 中文字幕日本 | 加勒比久久综合 | 最近2019中文字幕大全第二页 | 一起艹在线观看 | 特黄特色大片免费播放器使用方法 | 国产av国片精品 | 久久综合99| 少妇性l交大片7724com | 乱子伦一区二区三区 | 人人爽视频 | 日韩成人高清 | 精品国产AV色欲天媒传媒 | www.日韩精品 | 99久久这里只有精品 | 亚洲a在线观看 | 日本人做受免费视频 | 草草影院在线观看视频 | 久久资源总站 | 禁断介护av一区二区 | 日韩bbw | 一级片手机在线观看 | 综合 欧美 亚洲日本 | 欧美一区二区三区免费看 | 日韩视频在线观看二区 | av在线影片| 伊人影院综合 | 国产亚洲制服欧洲高清一区 | 久久免费精彩视频 | 日韩在线一卡二卡 | 欧美区一区二 | 亚日韩| 乳色吐息在线观看 | 人妻少妇被猛烈进入中文字幕 | 国内精品人妻无码久久久影院蜜桃 | 国产麻豆一区二区三区在线观看 | 一本一道久久a久久综合蜜桃 | 亲子乱一区二区三区 | 四虎永久在线精品免费网址 | 亚洲不卡网 | 一级在线免费观看 | 黄大色黄大片女爽一次 | 波多野吉衣av | 黄色www网站 | 国产精品成人av性教育 | 国产中文自拍 | 国产乱淫精品一区二区三区毛片 | 91色爱| 久草视频精品 | 伊人222成人综合网 亚洲日本中文 | av一二三四 | 黄色污小说 | 风间由美一区二区三区 | 国产精品熟女久久久久久 | 最新国产在线视频 | 美女张开腿让男人操 | 久久久久亚洲AV成人无在 | 国产人妻一区二区三区四区五区六 | 2024男人天堂 | 久久久久无码精品 | 99re在线 | 欧美一区国产一区 | 欧美一区二区在线观看视频 | 成人精品免费网站 | 一级aaaa毛片 | 日韩欧美亚洲综合 | 狠狠狠狠干 | 五十路中出 | 黄色伊人网| 色多多在线观看 | 中文字幕在线影院 | 午夜在线你懂的 | 亚洲影院av | av大全在线 | 日韩av中文字幕在线播放 | 狠狠艹狠狠干 | 正在播放欧美 | 床戏高潮做进去大尺度视频网站 | 六月丁香婷婷综合 | 日韩特黄 |