洛谷P4315 月下「毛景樹」

2021-08-17 09:34:51 字數 2053 閱讀 5477

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

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

輸入格式:

第一行乙個正整數n。

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

輸出格式:

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

輸入樣例#1:

4

1 2 8

1 3 7

3 4 9

max 2 4

cover 2 4 5

add 1 4 10

change 1 16

max 2 4

stop

輸出樣例#1:

9

16

1<=n<=100,000,操作+詢問數目不超過100,000。

保證在任意時刻,所有樹枝上毛毛果的個數都不會超過10^9個。

樹鏈剖分+線段樹。

同時有 區間加 與 區間修改。

pushdown 時先區間修改,並把左右兒子的區間加標記改為0,再下傳區間加。

線段樹區間修改時,還要將區間加的標記改為0!

還有,注意邊權轉點權。

附**:

#include#include#include#define lson rt<<1

#define rson rt<<1|1

#define data(x) b[x].data

#define sign1(x) b[x].c

#define sign2(x) b[x].d

#define lside(x) b[x].l

#define rside(x) b[x].r

#define maxn 100010

using namespace std;

int n,c=1,d=1;

int head[maxn],deep[maxn],size[maxn],son[maxn],fa[maxn],top[maxn],id[maxn];

struct node1a[maxn<<1];

struct node2b[maxn<<2];

struct node3g[maxn];

inline int read()

while(c>='0'&&c<='9')

return date*w;

}inline int max(const int &x,const int &y)

inline void add(int u,int v,int w)

void dfs1(int rt)

void update_one(int l,int r,int c,int rt)

pushdown(rt);

mid=lside(rt)+rside(rt)>>1;

if(l<=mid)update_one(l,r,c,lson);

if(mid>1;

if(l<=mid)update_two(l,r,c,lson);

if(mid>1;

if(l<=mid)ans=max(ans,query(l,r,lson));

if(middeep[y])swap(x,y);

if(x!=y)update_one(id[x]+1,id[y],k,1);

return;

}void work2(int x,int y,int k)

void work3(int x,int y)

void work()

if(ch[1]=='o')

break;

}case 'a':

case 'm':

} }}void init()

}int main()

洛谷 P4315 月下「毛景樹」

題目 又是一道維護邊權的題 對於每乙個節點,我們把他的點權設為他跟他父親之間的邊權,這樣就輕鬆地把邊權轉化為了點權 但是,這題的重點就在 同時維護區間加和區間修改 對於乙個區間 k kk,我們設 max v k maxv k maxv k 為區間最大值,add k c k add k c k add...

P4315 月下「毛景樹」

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

題解 P4315 月下「毛景樹」

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