link:
solution:
算是一道樹剖的模板題吧
除了模板以外,新增的操作就是「換$root$」
此時我們分類討論即可:
1、$x=$ 查詢$[1,n]$ (需要特判)
2、$x\not=$ 直接查詢子樹即可,不受$root$變化的影響
3、$x=$ 發現現在x的子樹就是整棵樹減去$x$往$root$方向向下最近的那個節點的子樹,查詢其補集即可
dfs序:
也是套路了,由於子樹中dfs序連續,用dfs序整體維護子樹($root$為$x$的子樹範圍為$[l[x],r[x]]$)
若$x$往$root$方向最近的點為$v$,則除去其子樹的補集為$[1,l[v]-1]+[r[v]+1,n]$
code:
//by newera#include using namespacestd;
const int inf=2147483647;
#define mid (l+r)/2
#define lc k<<1,l,mid
#define rc k<<1|1,mid+1,r
const int maxn=1e5+5;
int m,n,root=0,siz[maxn],dep[maxn],top[maxn],f[maxn][20],pos[maxn],dat[maxn],l[maxn],r[maxn],cnt=0;
int tag[5*maxn],mn[5*maxn],w[maxn];
vectora[maxn];
void dfs1(intk)
}void dfs2(int k,intup)
dfs2(bs,up);
for(int i=0;i)
if(a[k][i]!=f[k][0] && a[k][i]!=bs)
dfs2(a[k][i],a[k][i]);
r[k]=cnt;
}void push_up(int k)
void push_down(intk)
}void build(int k,int l,intr)
build(lc);build(rc);
push_up(k);
}void update_same(int a,int b,int x,int k,int l,intr)
push_down(k);
if(a<=mid) update_same(a,b,x,lc);
if(b>mid) update_same(a,b,x,rc);
push_up(k);
}int query_min(int a,int b,int k,int l,intr)
void solve_same(int u,int v,intx)
if(pos[u]>pos[v]) swap(u,v);
update_same(pos[u],pos[v],x,1,1,n);
}int lca(int u,intv)
if(dep[u]>dep[v]) swap(u,v);
returnu;
}int find_nearest(int u,intdepk) //尋找x到root方向最近的節點
int solve_max(intk)
}}intmain()
for(int i=1;i<=n;i++) scanf("%d",&dat[i]);
scanf("%d",&root);
dfs1(root);dfs2(root,root);
for(int i=1;i<=n;i++) w[pos[i]]=dat[i];
build(1,1,n);
for(int i=1;i<=m;i++)
return 0;
}
review:
1、整體維護子樹,想到利用dfs序
2、犯的絲帛錯誤:
(1)將更新f陣列的迴圈放到dfs2中處理完葉子結點後了,最好在dfs1中就更新掉
(2)線段樹處理中將最外層的while打成if了……
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...