P4315 月下「毛景樹」(樹鏈剖分)

2022-06-18 02:18:09 字數 2382 閱讀 4625

毛毛蟲經過及時的變形,最終逃過的一劫,離開了菜媽的菜園。 毛毛蟲經過千山萬水,歷盡千辛萬苦,最後來到了小小的紹興一中的校園裡。

爬啊爬~爬啊爬毛毛蟲爬到了一顆小小的「毛景樹」下面,發現樹上長著他最愛吃的毛毛果~ 「毛景樹」上有n個節點和n-1條樹枝,但節點上是沒有毛毛果的,毛毛果都是長在樹枝上的。但是這棵「毛景樹」有著神奇的魔力,他能改變樹枝上毛毛果的個數:

第一行乙個正整數n。

接下來n-1行,每行三個正整數ui,vi和wi,第i+1行描述第i條樹枝。表示第i條樹枝連線節點ui和節點vi,樹枝上有wi個毛毛果。 接下來是操作和詢問,以「stop」結束。

對於毛毛蟲的每個詢問操作,輸出乙個答案。

過的極其艱難的一題,要注意兩點:

(1)處理邊權類的樹剖的時候要在修改和查詢的時候避開lca,詳細見**。

#includeusing

namespace

std;

const

int maxn=1e5+100

;int

n,m;

struct

e edge[maxn*2

];int

head[maxn];

inttot;

void addedge (int u,int v,int w,int

e_id)

int belong[maxn];//

記錄每條邊的兒子節點

intson[maxn];

intid[maxn];

intfa[maxn];

intcnt;

intdep[maxn];

intsize[maxn];

inttop[maxn];

intw[maxn];

intwt[maxn];

struct

node segtree[maxn*4

];void build (int i,int l,int

r)

int mid=(l+r)>>1

; build(i

<<1

,l,mid);

build(i

<<1|1,mid+1

,r);

segtree[i].sum=max(segtree[i<<1].sum,segtree[i<<1|1

].sum);

}void spread (int

i)

if(segtree[i].lazy1)

}void update (int i,int l,int r,int val,int

f)

else

}spread(i);

int mid=(segtree[i].l+segtree[i].r)>>1

;

if (l<=mid)

update(i

<<1

,l,r,val,f);

if (r>mid)

update(i

<<1|1

,l,r,val,f);

segtree[i].sum=max(segtree[i<<1].sum,segtree[i<<1|1

].sum);

}int query (int i,int l,int

r) int qrange (int x,int

y)

if (dep[x]>dep[y]) swap(x,y);

ans=max(ans,query(1,id[x]+1

,id[y]));

return

ans;

}void uprange (int x,int y,int k,int

f)

if (dep[x]>dep[y]) swap(x,y);

update(

1,id[x]+1

,id[y],k,f);

}int lca (int x,int

y) void dfs1 (int x,int f,int

deep)

}void dfs2 (int x,int

topf) }

intmain ()

dfs1(

1,0,1

); dfs2(

1,1);

build(

1,1,n);

while (1

)

else

if (s=="

cover")

else

if (s=="

add"

)

else

if (s=="

max"

) }

}

P4315 月下「毛景樹」

毛毛蟲經過及時的變形,最終逃過的一劫,離開了菜媽的菜園。毛毛蟲經過千山萬水,歷盡千辛萬苦,最後來到了小小的紹興一中的校園裡。爬啊爬 爬啊爬毛毛蟲爬到了一顆小小的 毛景樹 下面,發現樹上長著他最愛吃的毛毛果 毛景樹 上有n個節點和n 1條樹枝,但節點上是沒有毛毛果的,毛毛果都是長在樹枝上的。但是這棵 ...

P4315 月下「毛景樹」 樹鏈剖分 線段樹

傳送門 樹鏈剖分 線段樹維護的模板題,但要注意的是邊權到點權的轉換以及絕對標記和相對標記的關係。include include include include using namespace std typedef long long ll const int n 1e5 10 struct edg...

題解 P4315 月下「毛景樹」

看原題戳這兒 如題,肯定是樹鏈剖分的題。建議先a掉這道模板題 不會的先看這個 前置知識 鏈式前向星,樹,dfs序,lca,樹形dp,線段樹,樹鏈剖分 一定要先完全學懂,否則不保證這篇題解能完全看懂!先簡化題目 已知一棵包含 n 0 le n le 100000 個結點的樹 連通且無環 每條邊上包含乙...