bzoj1036 樹的統計

2021-07-09 11:25:14 字數 1296 閱讀 5771

一棵樹上有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本身

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

顯然,這是一道關於維護樹中路徑的題目,一眼樹鏈剖分。本弱並沒有打樹鏈剖分解法。

強行把這道題打成動態樹也是可以的。。。

代買如下:

#include

#include

#include

#include

#define fo(i,a,b) for(i=a;i<=b;i++)

using

namespace

std;

const

int maxn=30000+10;

stack

sta;

struct dong;

dong e[maxn];

int tree[maxn][2],key[maxn],father[maxn],num[maxn],sum[maxn],pp[maxn];

int i,j,k,l,t,n,m;

bool bz[maxn];

char ch;

int pd(int x)

void update(int x)

void rotate(int x)

void clear(int x)

}void romove(int x,int y)

while (!sta.empty())

}void splay(int x,int y)

}void access(int x)

}void makeroot(int x)

void link(int x,int y)

int read()

while (ch>='0'&&ch<='9')

return x*f;

}char get()

int main()

fo(i,1,n-1) link(e[i].x,e[i].y);

scanf("%d",&m);

while (m--)

else

}}

Bzoj1036 樹的統計

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

bzoj 1036 樹的統計

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

BZOJ1036 樹的統計

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