洛谷 3178 樹上操作

2022-05-26 08:30:11 字數 1231 閱讀 4686

有一棵點數為 n 的樹,以點 1 為根,且樹點有邊權。然後有 m 個操作,分為三種:

輸入格式:

第一行包含兩個整數 n, m 。表示點數和運算元。

接下來一行 n 個整數,表示樹中節點的初始權值。

接下來 n-1 行每行兩個正整數 from, to , 表示該樹中存在一條邊 (from, to) 。

再接下來 m 行,每行分別表示一次操作。其中第乙個數表示該操作的種類( 1-3 ) ,之後接這個操作的引數( x 或者 x a ) 。

輸出格式:

對於每個詢問操作,輸出該詢問的答案。答案之間用換行隔開。

輸入樣例#1: 複製

5 5

1 2 3 4 5

1 21 4

2 32 5

3 31 2 1

3 52 1 2

3 3

輸出樣例#1: 複製

6

913

對於 100% 的資料, n,m<=100000 ,且所有輸入資料的絕對值都不會超過 10^6 。

題解:樹鏈潑糞,上**

#include#include

#include

#include

using

namespace

std;

long

long f[2001][2001

];struct

line

a[4001

];int head[2001

];long

long tmp[2001

];int

edge;

inline

void add(int s,int t,long

long

x)bool v[2001

];int size[2001

];int

n,kk;

inline

void trdp(int

d) }

size[d]+=size[t];

for(j=0;j<=size[d];j++)

f[d][j]=max(f[d][j],tmp[j]);}}

}int

main()

trdp(1);

printf(

"%lld\n

",f[1

][kk]);

return0;

}

洛谷 3178 樹上操作

作為乙個比樹剖板子還板子的題目,它竟讓我卡了近乙個下午。出去不敢說自己是學過樹剖的人。對於這道題目,會樹剖的都會做 不會別說會樹剖 其主要任務是用樹剖維護區間和,支援區間 單點修改。我的 這次主要就是卡在這裡了。首先我們要明確每個變數陣列的意義,並且明確他們下表的意義。int siz 102020 ...

洛谷 3178 HAOI2015 樹上操作

題目描述 有一棵點數為 n 的樹,以點 1 為根,且樹點有邊權。然後有 m 個操作,分為三種 操作 1 把某個節點 x 的點權增加 a 操作 2 把某個節點 x 為根的子樹中所有點的點權都增加 a 操作 3 詢問某個節點 x 到根的路徑中所有點的點權和。輸入格式 第一行包含兩個整數 n,m 表示點數...

洛谷P3178 HAOI2015 樹上操作

有一棵點數為 n 的樹,以點 1 為根,且樹點有邊權。然後有 m 個操作,分為三種 操作 1 把某個節點 x 的點權增加 a 操作 2 把某個節點 x 為根的子樹中所有點的點權都增加 a 操作 3 詢問某個節點 x 到根的路徑中所有點的點權和。輸入格式 第一行包含兩個整數 n,m 表示點數和運算元。...