一棵樹上有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」的操作,每行輸出乙個整數表示要求輸出的結果。
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
4 1
2 2
10 6
5 6
5 16
對於100%的資料,保證1<=n<=30000,0<=q<=200000;中途操作中保證每個節點的權值w在-30000到30000之間。
這是一道樹鏈剖分十分經典的題目,
鏈剖之後,用線段樹維護最大值還有和,
單點修改,詢問就在找lca的時候順便記錄一下就行了。
關於樹鏈剖分,請看樹鏈剖分詳解。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define n 30003
#define m 103
#define db double
#define p putchar
#define g getchar
#define inf 998244353
using namespace std;
char ch;
void read(int &n)
int max(int a,int b)
int min(int a,int b)
ints
qr(int x)
void write(int
x)int mx[n*4],s[n*4],l[n*4],r[n*4],v[n];
int nxt[n*2],to[n*2],lst[n],tot;
int si[n],top[n],son[n],dep[n],fa[n],id[n],rank[n],now;
int n,x,y,xx,yy,q,opl,opr,ops,opx;
void ins(int
x,int
y)void dfs(intx)}
void dfs_(int
x,int t)
void updata(int
x)void build(int
x,int ll,int rr)
intm=(ll+rr)>>1;
build(x
<<1,ll,m);
build((x
<<1)+1,m+1,rr);
updata(x);
}void work(int
x) int
m=(l[x]+r[x])>>1;
if(opl<=m)work(x
<<1);
if(m
x<<1)+1);
updata(x);
}int main()
else
else
opl=id[x];
opr=id[y];
if(opl>opr)swap(opl,opr);
work(1);
if(ops<0)p('-'),write(-ops);else
write(ops);
p('\n');}}
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 樹的統計
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的路徑上的節點的權值和 ...