一棵樹上有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 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
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define max 50000
#define inf 1000000000
#define lson (now<<1)
#define rson ((now<<1)|1)
inline
int read()
while(ch>='0'&&ch<='9')
return x*t;
}struct line
e[max*2];
int h[max],cnt=1,tim,dfn[max],low[max],hson[max],f[max];
int top[max],size[max],dep[max];
int n,line[max],v[max];
struct node
c[max*4];
inline
void add(int u,int v)
; h[u]=cnt++;
}void dfs1(int u,int ff)
}void dfs2(int u,int tp)
low[u]=tim;
}void build(int now,int l,int r)
int mid=(l+r)>>1;
build(lson,l,mid);build(rson,mid+1,r);
c[now].val=c[lson].val+c[rson].val;
c[now].mm=max(c[lson].mm,c[rson].mm);
}void update(int now,int l,int r,int k,int w)
int mid=(l+r)>>1;
if(k<=mid)update(lson,l,mid,k,w);
else update(rson,mid+1,r,k,w);
c[now].val=c[lson].val+c[rson].val;
c[now].mm=max(c[lson].mm,c[rson].mm);
}int query1(int now,int l,int r,int al,int ar)
int query2(int now,int l,int r,int al,int ar)
int answer1(int u,int v)
if(dep[u]1,1,n,dfn[v],dfn[u]);
return ans;
}int answer2(int u,int v)
if(dep[u]1,1,n,dfn[v],dfn[u]),ans);
return ans;
}int main()
dfs1(1,0);dfs2(1,1);
for(int i=1;i<=n;++i)v[i]=read();
build(1,1,n);
int q=read();
while(q--)
}
ZJOI2008 樹的統計(樹鏈剖分 線段樹)
傳送門 板子題 include include include using namespace std const int maxn 1000005 int n,m,x,y,a maxn sum maxn 2 add maxn 2 maxq maxn struct edgeedge maxn 1 i...
ZJOI2008樹的計算 樹鏈剖分
題目 i.change u t 把結點u的權值改為t ii.qmax u v 詢問從點u到點v的路徑上的節點的最大權值 iii.qsum u v 詢問從點u到點v的路徑上的節點的權值和 注意 從點u到點v的路徑上的節點包括u和v本身 include include include include u...
ZJOI 2008 樹的統計
一棵樹上有n個節點,編號分別為1到n,每個節點都有乙個權值w。我們將以下面的形式來要求你對這棵樹完成一些操作 i.change u t 把結點u的權值改為t ii.qmax u v 詢問從點u到點v的路徑上的節點的最大權值 iii.qsum u v 詢問從點u到點v的路徑上的節點的權值和 注意 從點...