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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

BZOJ3068 : 小白树

發布時間:2025/5/22 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ3068 : 小白树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

枚舉每條樹邊,將其斷開,那么兩側肯定取帶權重心最優。

考慮如何求出每個子樹的重心,枚舉其所有兒子,通過重量關系就可以判斷出重心位于哪棵子樹。

然后將那棵子樹的重心暴力往上爬即可,因為每個點作為重心肯定是一段連續的鏈,所以復雜度為$O(n)$。

然后就是如何求出砍掉每棵子樹之后剩下的部分的重心。

設當前點到根的路徑為關鍵路徑,那么可以通過二分求出重心在關鍵路徑上哪個點的子樹里。

對于那棵子樹,重心要么是它本身,要么在它最重的子樹里,要么在次重的子樹里。

在線段樹上按dfs序維護區間內子樹重量的最大值,即可用線段樹完成重心的查詢,時間復雜度$O(\log n)$。

總時間復雜度$O(n\log n)$。

?

#include<cstdio> #include<algorithm> using namespace std; typedef long long ll; const int N=500010,BUF=12000000; char Buf[BUF],*buf=Buf; int n,i,x,y,w[N],g[N],v[N<<1],nxt[N<<1],ed; int f[N],d[N],size[N],son[N],top[N],st[N],en[N],id[N],dfn,q[N],cq; int fir[N],sec[N],center[N],vip[N]; ll sum[N],sw[N],val[1050000],sd[N],su[N],ans=1LL<<60; inline void read(int&a){for(a=0;*buf<48;buf++);while(*buf>47)a=a*10+*buf++-48;} inline void add(int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;} void dfs(int x){size[x]=1;for(int i=g[x];i;i=nxt[i])if(v[i]!=f[x]){f[v[i]]=x,d[v[i]]=d[x]+1;dfs(v[i]),size[x]+=size[v[i]];if(size[v[i]]>size[son[x]])son[x]=v[i];} } void dfs2(int x,int y){id[st[x]=++dfn]=x;top[x]=y;if(son[x])dfs2(son[x],y);for(int i=g[x];i;i=nxt[i])if(v[i]!=son[x]&&v[i]!=f[x])dfs2(v[i],v[i]);en[x]=dfn; } inline int dis(int x,int y){int t=d[x]+d[y];for(;top[x]!=top[y];x=f[top[x]])if(d[top[x]]<d[top[y]])swap(x,y);if(d[x]>d[y])swap(x,y);return t-2*d[x]; } inline void cal(int x){int i=center[fir[x]];ll t=sum[fir[x]]+sd[x]-sd[fir[x]]-sw[fir[x]]+(sw[x]-sw[fir[x]])*(d[i]-d[x]);while(2*sw[i]<sw[x])t+=2*sw[i]-sw[x],i=f[i];center[x]=i;sum[x]=t; } void dfs3(int x){sw[x]=w[x];for(int i=g[x];i;i=nxt[i]){int y=v[i];if(y==f[x])continue;dfs3(y);sw[x]+=sw[y];if(sw[y]>sw[fir[x]])sec[x]=fir[x],fir[x]=y;else if(sw[y]>sw[sec[x]])sec[x]=y;sd[x]+=sd[y]+sw[y];}if(2*sw[fir[x]]<=sw[x]){center[x]=x;sum[x]=sd[x];return;}cal(x); } void dfs4(int x){if(f[x]){int y=f[x];su[x]=su[y]+sd[y]-sd[x]-2*sw[x]+sw[1];}for(int i=g[x];i;i=nxt[i])if(v[i]!=f[x])dfs4(v[i]); } inline int lower(ll x){int l=2,r=cq,mid,t=1;while(l<=r)if(2*(sw[q[mid=(l+r)>>1]]-x)>=sw[1]-x)l=(t=mid)+1;else r=mid-1;return q[t]; } void build(int x,int a,int b){if(a==b){val[x]=sw[id[a]]*2;return;}int mid=(a+b)>>1;build(x<<1,a,mid),build(x<<1|1,mid+1,b);val[x]=max(val[x<<1],val[x<<1|1]); } int ask(int x,int a,int b,int c,int d,ll p){if(val[x]<p)return 0;if(a==b)return a;int mid=(a+b)>>1,t=0;if(d>mid)t=ask(x<<1|1,mid+1,b,c,d,p);if(t)return t;if(c<=mid)t=ask(x<<1,a,mid,c,d,p);return t; } void dfs5(int x){if(f[x])vip[x]=lower(sw[x]);q[++cq]=x;for(int i=g[x];i;i=nxt[i])if(v[i]!=f[x])dfs5(v[i]);cq--; } inline void solve(int x){int t=vip[x],y,z=0;if(st[fir[t]]<=st[x]&&en[x]<=en[fir[t]])y=sec[t];else y=fir[t];if(y)z=ask(1,1,n,st[y],en[y],sw[1]-sw[x]);if(!z)z=t;else z=id[z];ans=min(ans,sum[x]+sd[z]+su[z]-sd[x]-sw[x]*dis(x,z)); } int main(){fread(Buf,1,BUF,stdin);read(n);for(i=1;i<n;i++)read(x),read(y),add(x,y),add(y,x);for(i=1;i<=n;i++)read(w[i]);dfs(1);dfs2(1,1);dfs3(1);dfs4(1);build(1,1,n);dfs5(1);for(i=2;i<=n;i++)solve(i);return printf("%lld",ans),0; }

  

轉載于:https://www.cnblogs.com/clrs97/p/5842291.html

總結

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

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

主站蜘蛛池模板: 成人在线免费视频播放 | 丁香激情五月 | 成人h视频在线观看 | 白丝校花扒腿让我c | 女人18岁毛片 | 激情综合区 | 日本一二三区在线视频 | 狠狠操欧美 | 久久久久亚洲av片无码v | 蜜桃网站 | 这里只有久久精品 | 国产亚洲av综合人人澡精品 | 欧美一级性 | 欧美三级午夜理伦三级老人 | jizzjizz视频| 欧美sese| 男人看的网站 | 成人高潮片免费网站 | 久久香蕉影院 | 免费看a级片 | 国产aⅴ精品一区二区果冻 台湾性生生活1 | 欧美特级黄色录像 | 欧美经典一区二区 | 石原莉奈在线播放 | 亚洲色图婷婷 | 1024毛片基地 | 涩涩网址| 色网站在线看 | 免费在线观看小视频 | 国产第一福利影院 | 国产99久一区二区三区a片 | 91福利视频免费观看 | 女人的毛片 | 超碰av人人 | 中国 免费 av | 亚洲精品免费观看 | 美女人人操 | 中文字幕一区二区三区手机版 | 中国黄色录像 | 99思思| 色戒未删节版 | 特黄视频免费看 | 很嫩很紧直喷白浆h | 久草综合在线视频 | 在线观看av大片 | 日本小视频网站 | 国产一级爽片 | 草草在线观看 | 欧美日韩免费 | 亚洲乱轮视频 | 91成人高清 | free黑人多人性派对hd | 国产视频在线免费观看 | 久久偷看各类wc女厕嘘嘘偷窃 | 亚洲人免费视频 | 日本888xxxx| 亚洲资源网 | 亚洲第一av网站 | 激情图片区 | 99热8| 亚洲精品乱码久久久久久日本蜜臀 | 国产嫩草在线 | 欧美成人高清视频 | 贝利弗山的秘密在线观看 | 国产男人搡女人免费视频 | 亚洲青涩| 性自由色xxxx免费视频 | 亚洲一区二区三区影院 | 香蕉午夜视频 | 日本东京热一区二区 | 欧美亚洲日本 | 日韩综合一区二区 | 日韩免费视频一区二区 | 亚洲欧美久久久 | 天堂综合网久久 | 人人干av | 成人免费毛片糖心 | 欧美三级三级三级爽爽爽 | 午夜精品免费观看 | 日韩网站免费观看 | 公肉吊粗大爽色翁浪妇视频 | 午夜资源网 | 亚洲免费高清 | 极品丰满少妇 | 日韩精品91| 日韩精品极品视频 | 女人高潮潮呻吟喷水 | 视频网站在线观看18 | 性视频网址 | 丁五月| 在线观看一区二区三区四区 | 美女狂揉羞羞的视频 | 国偷自产视频一区二区久 | 国产影视一区 | 国产真人无码作爱视频免费 | 亚洲av区无码字幕中文色 | av网站免费在线观看 | 超碰2022 | av动漫免费观看 |