BZOJ 3083 遙遠的國度

2022-05-13 11:16:58 字數 2076 閱讀 3802

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...