BZOJ3083 遙遠的國度 題解

2021-08-20 05:52:42 字數 2406 閱讀 2483

題面:傳送門

鏈上修改,子樹查詢,一看就是樹鏈剖分,鏈修改不需要說了吧,查詢

x x

的子樹只需要查詢[p

osx,

posx

+siz

ex−1

]' role="presentation" style="position: relative;">[po

sx,p

osx+

size

x−1]

[pos

x,po

sx+s

izex

−1]即可。

最難的也是最最關鍵的地方就是換根操作了。稍稍想一想就知道,不可能是真的換根,所以,我們要將換根操作轉化成別的東西。

畫圖模擬一下,就會發現在當前根為rootr

oo

t,查詢的子樹的根為

x x

的時候,有3種不同的情況:①若x

=roo

t' role="presentation" style="position: relative;">x=r

ootx

=roo

t,直接查詢整棵樹即可。

②若在一開始的樹中,

x x

為roo

t' role="presentation" style="position: relative;">roo

troo

t的祖先,答案為除了包含rootr

oot的x

x的子樹以外的所有點的最小值。

③否則,直接查詢原樹中

x' role="presentation" style="position: relative;">x

x的子樹。

這道題就這樣做完了。

時間複雜度:θ(

nlog

22n)θ(

nlog

22n)

。 全部**:

#include

#include

#include

#include

#include

using

namespace

std;

int val[100010];

int pos[100010];

int siz[100010];

int mymin(int x,int y)

namespace sgt

void pushdown(int x)

}void build(int &x,int l,int r)

int mid=(l+r)>>1;

build(son[x][0],l,mid);

build(son[x][1],mid+1,r);

pushup(x);

}void update(int a,int b,int k,int l,int r,int v)

else

}int query(int a,int b,int k,int l,int r)

}int n,m;

vector

g[100010],son[100010];

int d[100010];

int par[100010][21];

int dep[100010];

int sps[100010];

void dfs(int x,int p)

}int lca(int x,int y)

int rt[100010];

int root;

int ind;

void hld(int x,int lst)

int gtka(int x,int k)

int main()

for(int i=1;i<=n;i++)scanf("%d",d+i);

scanf("%d",&root);

dep[0]=-1;

dfs(1,0);

for(int i=1;i<=20;i++)

for(int i=1;i<=n;i++)

}hld(1,1);

sgt::build(sgt::root,1,n);

int cur=0;

while(m--)

else

if(op==2)

sgt::update(pos[xy],pos[x],sgt::root,1,n,v);

while(rt[y]!=rt[xy])

sgt::update(pos[xy],pos[y],sgt::root,1,n,v);

}else

else

printf("%d\n",sgt::query(pos[x],pos[x]+siz[x]-1,sgt::root,1,n));}}

return

0;}

bzoj3083 遙遠的國度

題意 給定一棵樹,支援換根,路徑權值覆蓋,求子樹最小。思路 求子樹?上樹鏈剖分,但是換根怎麼辦?我們只能通過原有資訊推出換根後的答案。換根不影響路徑修改,所以只要考慮子樹最小值的維護。這裡要分3種情況討論 1 如果詢問點是當前根,直接返回整棵樹的最小值。2 如果在原樹中,當前根不在 x的子樹中,直接...

bzoj3083 遙遠的國度

time limit 10 sec memory limit 1280 mb submit 1733 solved 429 submit status discuss description 描述 zcwwzdjn在追殺十分sb的zhx,而zhx逃入了乙個遙遠的國度。當zcwwzdjn準備進入遙遠的...

bzoj3083 遙遠的國度

time limit 10 sec memory limit 1280 mb submit 1960 solved 484 submit status discuss 描述zcwwzdjn在追殺十分sb的zhx,而zhx逃入了乙個遙遠的國度。當zcwwzdjn準備進入遙遠的國度繼續追殺時,守護神ra...