題面:傳送門
鏈上修改,子樹查詢,一看就是樹鏈剖分,鏈修改不需要說了吧,查詢
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...