ZJOI2008 樹的統計Count

2022-02-15 15:27:57 字數 2067 閱讀 8071

一棵樹上有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」的形式給出。 對於100%的資料,保證1<=n<=30000,0<=q<=200000;中途操作中保證每個節點的權值w在-30000到30000之間。

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

4

1 22 3

4 14 2 1 3

12qmax 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

4

1 2

2 10

6 5

6 5

16樹剖模板,注意細節

1 #include 2 #include 3 #include 4 

5 const int maxn=60010;

6 const int inf=1e9;

7 8 int n,q,inr;

9 10 int a[maxn],id[maxn],son[maxn],fa[maxn];

11 int rank[maxn],siz[maxn],dep[maxn],top[maxn];

12 13 struct segmenttree ;

17 segmenttree t[maxn<<2];

18 19 struct skt ;

23 skt e[maxn<<2];

24 25 int head[maxn],tot;

26 27 inline void read(int&x)

33 34 inline void add(int x,int y)

39 40 void dfs_1(int now,int f)

91 92 void modify(int now,int pos,int val)

98 t[now].mx=-inf;

99 int mid=(t[now].l+t[now].r)>>1;

100 if(pos<=mid) modify(now<<1,pos,val);

101 else modify(now<<1|1,pos,val);

102 up(now);

103 }

104

105 int query_max(int now,int l,int r)

113

114 int query_sum(int now,int l,int r)

122

123 inline void pre_query(int x,int y,char c)

136

137 int hh() {

138 freopen("bzoj_1036.in","r",stdin);

139 freopen("bzoj_1036.out","w",stdout);

140 read(n);

141 int x,y,z;

142 char opt[10];

143 for(int i=1;i

**

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 樹的統計

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

ZJOI2008 樹的統計

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