洛谷P3178 HAOI2015 樹上操作

2022-04-30 23:48:21 字數 1993 閱讀 8921

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

操作 \(1\) :把某個節點 \(x\) 的點權增加 \(a\) 。

操作 \(2\) :把某個節點 \(x\) 為根的子樹中所有點的點權都增加 \(a\)。

操作 \(3\) :詢問某個節點 \(x\) 到根的路徑中所有點的點權和。

輸入格式:

第一行包含兩個整數 \(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 \leq 100000\),且所有輸入資料的絕對值都不會超過 \(10^6\) 。

思路:這道題跟洛谷\(p3384\)的唯一區別在於這裡是單點修改,上面說過,區間修改包括單點修改,所以,可是說是一點區別都沒有,就是打一遍加深一下對樹剖的印象。

**:

#include#include#include#define maxn 100007 

#define ll long long

#define ls rt<<1

#define rs rt<<1|1

using namespace std;

int head[maxn],d[maxn],a[maxn];

int num,cnt,n,m,fa[maxn],id[maxn];

int w[maxn],top[maxn],size[maxn],son[maxn];

ll lazy[maxn<<2],sum[maxn<<2],y;

inline ll qread()

struct node e[maxn<<1];

inline void ct(int u, int v)

inline void pushup(int rt)

void build(int rt, int l, int r)

int mid=(l+r)>>1;

build(ls,l,mid);

build(rs,mid+1,r);

pushup(rt);

}inline void pushdown(int rt, int len)

}void modify(int rt, int l, int r, int l, int r, ll val)

ll csum(int rt, int l, int r, int l, int r)

void dfs1(int u, int f) }}

void dfs2(int u, int t)

}ll calc(int x, int y)

int main()

d[1]=1,fa[1]=1;

dfs1(1,0);dfs2(1,1);build(1,1,n);

for(int i=1,k,x;i<=m;++i)

if(k==2)

if(k==3)

} return 0;

}

洛谷P3178 HAOI2015 樹上操作

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

洛谷 P3178 HAOI2015 樹上操作

這篇題解原發於我的blog 這是一道樹鏈剖分的板子題,純粹的模板題事實上模板題比他難 事實上只要做過這道題p3384 模板 樹鏈剖分就可以我把題目難度提公升了 畢竟我是剛切完板子題的人,初生牛犢不怕虎,直接再打一遍練練手被逼的 記住因為這題沒有提供取模的數,因為 10 6 times10 5 2 1...

洛谷P3178 HAOI 2015 樹上操作

題目 樹剖裸題,這個題更可以深刻的理解樹剖中把樹上的節點轉換為區間的思想。要注意在區間上連續的節點,一定是在一棵子樹中。include define int long long define ls left,mid,root 1 define rs mid 1,right,root 1 1 defi...