有一棵點數為 n 的樹,以點 1 為根,且樹點有邊權。然後有 m 個操作,分為三種:
輸入格式:
第一行包含兩個整數 n, m 。表示點數和運算元。
接下來一行 n 個整數,表示樹中節點的初始權值。
接下來 n-1 行每行兩個正整數 from, to , 表示該樹中存在一條邊 (from, to) 。
再接下來 m 行,每行分別表示一次操作。其中第乙個數表示該操作的種類( 1-3 ) ,之後接這個操作的引數( x 或者 x a ) 。
輸出格式:
對於每個詢問操作,輸出該詢問的答案。答案之間用換行隔開。
輸入樣例#1: 複製
5 51 2 3 4 5
1 21 4
2 32 5
3 31 2 1
3 52 1 2
3 3
輸出樣例#1: 複製
6913
對於 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 表示點數和運算元。...