一棵樹上有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的路徑上的節點的權值和 注意 ...