Vijos P1986 小h的妹子樹二

2021-08-13 23:43:07 字數 2020 閱讀 6564

背景

小h同學的妹子實在是太多辣,多的他又種下了一顆妹子樹。

描述樹上有n個妹子,兩兩之間有且僅有一條路徑。

小h每次想泡兩個妹子,但是妹子是一種奇怪的生物(霧),小h無論想泡哪一對妹子,都得為她們路徑上的所有妹子支付軟妹幣(p.s.泡乙個不就好了)。

這次我們的妹子樹形態不會變了,但是她們需要的軟妹幣會變化。

小h很苦惱,他需要知道每一次泡妹子需要多少預算,他請求了小y,小y當然會辣,他想考考你。

支援兩種操作:

q u v 詢問泡u和v的價值

c u v改變u的權值為v

格式輸入格式

輸入檔案第一行是乙個整數n,表示n個妹子,從1開始編號。

輸入檔案第二行是n個正整數vi,表示每個妹子的初始所需軟妹幣。

接下來n-1行,每行兩個整數u和v,表示u和v有一條邊。

然後是乙個整數m,一共m此操作

接下來m上格式如上。

輸出格式

對於每一次詢問操作,你需要輸出乙個整數,表示所需的軟妹幣,每行乙個答案。

樣例1樣例輸入1

312

3122

35q 12

q 13c2

3c35

q 13

樣例輸出1

3

69

限制

對於前20%的資料,滿足1<=n<=300,1<=m<=500

對於前60%的資料,滿足1<=n<=3000,1<=m<=5000

對於20%的資料,是一條鏈

對於前50%的資料,保證是完全隨機

對於前80%的資料,滿足1<=n<=30000,1<=m<=50000

對於100%的資料,滿足1<=n<=100000,1<=m<=200000,1<=vi<=1000

樹剖+線段樹

#include

using namespace std;

int n,tot,t,sz;

int lnk[100005],w[100005],size[100005],fa[100005],dep[100005],ft[100005],pos[100005],top[100005];

struct edge

e[200005];

struct tree

tr[300005];

int readln()

void add(int

x,int

y)void dfs1(intx)}

void dfs2(int

x,int to)

if (k==0) return;

dfs2(k,to);

for (int i=lnk[x];i;i=e[i].nxt)

}void build(int l,int r,int rt)

int mid=(l+r)>>1;

build(l,mid,rt<<1);build(mid+1,r,rt<<1|1);

tr[rt].sum=tr[rt<<1].sum+tr[rt<<1|1].sum;

}void change(int

x,int

y,int rt)

int mid=(l+r)>>1;

if (x

<=mid) change(x,y,rt<<1); else change(x,y,rt<<1|1);

tr[rt].sum=tr[rt<<1].sum+tr[rt<<1|1].sum;

}int query(int l,int r,int rt)

void sort(int &x,int &y)

int solveq(int x,int y)

if (pos[x]>pos[y]) sort(x,y);

ret+=query(pos[x],pos[y],1);

return ret;

}int main()

return

0; }

VIJOS1986 小h的妹子樹二

給定一棵有n個節點的樹 n 10 5 需要支援2種操作 q u v 詢問從u到v路徑上所有點的權值和 c u v 改變u的權值為v 操作次數m 2 10 5 無腦樹鏈剖分,然後直接用bit維護就可以了 但是這題的操作比較簡單,使用樹鏈剖分太大才小用了.樹鏈剖分,顧名思義,將樹上的鏈進行適當的剖分使得...

Vijos P1391 想越獄的小杉

背景 這次小杉來到了經典美劇 越獄 的場景裡 他被抓起來了 幹嘛幻想這麼鬱悶的場景 小杉身為新一代的scofield,在挖了半個月之後終於挖通牢房裡的地道。在地道裡,無數的管道路線困惑了他。若對情節有任何疑問,請 原劇 描述小杉看了看自己的紋身,明白了整個管道網是由n個小房間和若干小房間之間的單向的...

小H的詢問(線段樹)

線段樹需要維護的 最大有效子區間權值和,左端最大有效子區間權值和,右端最大有效子區間權值和,區間和,本區間有效性。include include include include include include include define maxn 1000005 using namespace s...