ZJOI2008 樹的統計

2021-08-08 21:58:03 字數 2331 閱讀 8070

[zjoi2008]樹的統計

題目描述

一棵樹上有n個節點,編號分別為1到n,每個節點都有乙個權值w。

我們將以下面的形式來要求你對這棵樹完成一些操作:

i. change u t : 把結點u的權值改為t

ii. qmax u v: 詢問從點u到點v的路徑上的節點的最大權值

iii. qsum u v: 詢問從點u到點v的路徑上的節點的權值和

注意:從點u到點v的路徑上的節點包括u和v本身

輸入輸出格式

輸入格式:

輸入檔案的第一行為乙個整數n,表示節點的個數。

接下來n – 1行,每行2個整數a和b,表示節點a和節點b之間有一條邊相連。

接下來一行n個整數,第i個整數wi表示節點i的權值。

接下來1行,為乙個整數q,表示操作的總數。

接下來q行,每行乙個操作,以「change u t」或者「qmax u v」或者「qsum u v」的形式給出。

輸出格式:

對於每個「qmax」或者「qsum」的操作,每行輸出乙個整數表示要求輸出的結果。

輸入樣例#1:4

1 2

2 3

4 1

4 2 1 3 12

qmax 3 4

qmax 3 3

qmax 3 2

qmax 2 3

qsum 3 4

qsum 2 1

change 1 5

qmax 3 4

change 3 6

qmax 3 4

qmax 2 4

qsum 3 4

輸出樣例#1:4

1 2

2 10

6 5

6 5

16 說明:

對於100%的資料,保證1<=n<=30000,0<=q<=200000;中途操作中保證每個節點的權值w在-30000到30000之間。

題解:

樹鏈剖分,維護max和sum就可以了。

**:

#include#include#include#includeusing namespace std;

const int max_n = 300001;

const int inf = 1e9+7;

struct tree_l

tree[max_n*4];

char c[11];

int point[max_n],nxt[max_n],v[max_n],val[max_n];

int fa[max_n],top[max_n],size[max_n],rank_n[max_n],deep[max_n];

int n,m,a,b,q,tot,tans,mans,root;

inline void init()

inline void update(int now)

inline void addedge(int x,int y)

inline void change(int now,int l,int r,int val)

int mid=(lr+rr)>>1;

if(l<=mid) change(now<<1,l,r,val);

if(r>mid) change((now<<1)+1,l,r,val);

update(now);

}inline void build(int now,int l,int r)

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

build(now<<1,l,mid);

build((now<<1)+1,mid+1,r);

}inline void dfs1(int now,int f)

}inline void dfs2(int now,int tip)

inline void squery(int x,int y)

int main()

for(int i=1; i<=n; ++i)

scanf("%d",&val[i]);

tot=0;

build(1,1,n);

dfs1(root,1);

dfs2(root,root);

scanf("%d",&q);

for(int i=1; i<=q; ++i)

return 0;

}

ZJOI 2008 樹的統計

一棵樹上有n個節點,編號分別為1到n,每個節點都有乙個權值w。我們將以下面的形式來要求你對這棵樹完成一些操作 i.change u t 把結點u的權值改為t ii.qmax u v 詢問從點u到點v的路徑上的節點的最大權值 iii.qsum u v 詢問從點u到點v的路徑上的節點的權值和 注意 從點...

ZJOI2008 樹的統計

一棵樹上有n個節點,編號分別為1到n,每個節點都有乙個權值w。我們將以下面的形式來要求你對這棵樹完成一些操作 i.change u t 把結點u的權值改為t ii.qmax u v 詢問從點u到點v的路徑上的節點的最大權值 iii.qsum u v 詢問從點u到點v的路徑上的節點的權值和 注意 從點...

ZJOI2008 樹的統計

題目描述 一棵樹上有n個節點,編號分別為1到n,每個節點都有乙個權值w。我們將以下面的形式來要求你對這棵樹完成一些操作 i.change u t 把結點u的權值改為t ii.qmax u v 詢問從點u到點v的路徑上的節點的最大權值 iii.qsum u v 詢問從點u到點v的路徑上的節點的權值和 ...