一棵樹上有n個節點,編號分別為1到n,每個節點都有乙個權值w。我們將以下面的形式來要求你對這棵樹完成
一些操作: i. change u t : 把結點u的權值改為t ii. qmax u v: 詢問從點u到點v的路徑上的節點的最大權值 i
ii. qsum u v: 詢問從點u到點v的路徑上的節點的權值和 注意:從點u到點v的路徑上的節點包括u和v本身
input
輸入的第一行為乙個整數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之間。
output
對於每個「qmax」或者「qsum」的操作,每行輸出乙個整數表示要求輸出的結果。
sample input
41 2
2 34 1
4 2 1 3
12qmax 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
sample output41
22106
56516
#include#include#include#includeusing namespace std;
const int maxn=3e4+5;
int read()
while(ch>='0'&&ch<='9')
return x*f;
}struct nodeed[maxn<<1];
int head[maxn],cnt;
void addedge(int u,int v)
int sz[maxn],fa[maxn],son[maxn],dep[maxn],p[maxn],top[maxn];
int pos;
void dfs1(int u,int pre,int d)
void update(int a,int b,int r)
int mid=(stu[r].l+stu[r].r)>>1;
if(a>mid)update(a,b,(r<<1)+1);
else update(a,b,r<<1);
pushup(r);
return ;
}int qmax(int l,int r,int rt)
void init()
int getmax(int u,int v)
re=max(re,qmax(p[f1],p[u],1));
u=fa[f1];
f1=top[u];
} if(dep[u]re=max(re,qmax(p[v],p[u],1));
return re;
}int getsum(int u,int v)
re=re+qsum(p[f1],p[u],1);
u=fa[f1];
f1=top[u];
} if(dep[u]re=re+qsum(p[v],p[u],1);
return re;
}int main()
dfs1(1,0,0);
dfs2(1,1);
for(int i=1;i<=n;i++)
build(1,pos-1,1);
int q;
q=read();
while(q--)
else if(str[1]=='m')
else printf("%d\n",getsum(a,b));
} } return 0;
}
HYSBZ 1036 樹的統計Count
題意 有一棵樹,每個節點有權值。我們現在有三個操作 1 改變某點的權值。2 給出兩個點,求這兩個點之間的路徑上所有點的權值之和。3 給出兩個點,求這兩個點之間的路徑上所有點的最大權值。乙個裸的樹剖,刷了兩三天樹剖的題了,感覺現在已經把樹剖理解的差不多了,具體操作現在已經可以很快在腦海中模擬出來了。i...
HYSBZ 1036樹鏈剖分
一棵樹上有n個節點,編號分別為1到n,每個節點都有乙個權值w。我們將以下面的形式來要求你對這棵樹完成 一些操作 i.change u t 把結點u的權值改為t ii.qmax u v 詢問從點u到點v的路徑上的節點的最大權值 i ii.qsum u v 詢問從點u到點v的路徑上的節點的權值和 注意 ...
bzoj1036 樹的統計
一棵樹上有n個節點,編號分別為1到n,每個節點都有乙個權值w。我們將以下面的形式來要求你對這棵樹完成一些操作 i.change u t 把結點u的權值改為t ii.qmax u v 詢問從點u到點v的路徑上的節點的最大權值 iii.qsum u v 詢問從點u到點v的路徑上的節點的權值和 注意 從點...