BZOJ 1036 樹的統計 Count 樹鏈剖分

2021-06-23 09:19:02 字數 999 閱讀 5073

題目大意:一棵樹上有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<=3w

裸的樹鏈剖分。。。

這題沒有區間修改所以我們可以大膽地套用zkw線段樹了(太久沒寫都忘光了的說)

注意修改點的時候要修改的是點的重標號而不是點本身 因為這事鬱悶了一會

|點權|<=3w 3w*3w=9e 所以沒必要開long long int完全能解決

#include#include#include#include#define m 30100

using namespace std;

struct abcdtable[m<<1];

int head[m],tot;

void add(int x,int y)

int n,m,q,max[70000],sum[70000],fa[m],son[m],dpt[m],top[m],pos[m],siz[m],f[m],cnt;

char s[100];

void dfs1(int x)

}void dfs2(int x)

max[pos[x]+q]=sum[pos[x]+q]=f[x];

for(i=head[x];i;i=table[i].next) }

void build_tree()

void change(int x,int y)

int getmax(int x,int y)

return re;

}int qmax(int x,int y)

return re;

}int qsum(int x,int y)

return 0;

}

bzoj1036 樹的統計

一棵樹上有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 我們將 以下面的 形式來要 求你對棵 樹完成一 些操作 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的路徑上的...