Description

S国有N个城市,编号从1到N。城市间用N-1条双向道路连接,满足
从一个城市出发可以到达其它所有城市。每个城市信仰不同的宗教,如飞天面条神教、隐形独角兽教、绝地教都是常见的信仰。为了方便,我们用不同的正整数代表各种宗教,

S国的居民常常旅行。旅行时他们总会走最短路,并且为了避免麻烦,只在信仰和他们相同的城市留宿。当然旅程的终点也是信仰与他相同的城市。S国政府为每个城市标定了不同的旅行评级,旅行者们常会记下途中(包括起点和终点)留宿过的城市的评级总和或最大值。
    在S国的历史上常会发生以下几种事件:
”CC x c”:城市x的居民全体改信了c教;
”CW x w”:城市x的评级调整为w;
”QS x y”:一位旅行者从城市x出发,到城市y,并记下了途中留宿过的城市的评级总和;
”QM x y”:一位旅行者从城市x出发,到城市y,并记下了途中留宿过
的城市的评级最大值。
    由于年代久远,旅行者记下的数字已经遗失了,但记录开始之前每座城市的信仰与评级,还有事件记录本身是完好的。请根据这些信息,还原旅行者记下的数字。    为了方便,我们认为事件之间的间隔足够长,以致在任意一次旅行中,所有城市的评级和信仰保持不变。

Input

输入的第一行包含整数N,Q依次表示城市数和事件数。
    接下来N行,第i+l行两个整数Wi,Ci依次表示记录开始之前,城市i的
评级和信仰。
    接下来N-1行每行两个整数x,y表示一条双向道路。
    接下来Q行,每行一个操作,格式如上所述。

Output

对每个QS和QM事件,输出一行,表示旅行者记下的数字。

Sample Input

5 6
3 1
2 3
1 2
3 3
5 1
1 2
1 3
3 4
3 5
QS 1 5
CC 3 1
QS 1 5
CW 3 3
QS 1 5
QM 2 4

Sample Output

8
9
11
3

HINT

N,Q < =10^5    , C < =10^5

数据保证对所有QS和QM事件,起点和终点城市的信仰相同;在任意时
刻,城市的评级总是不大于10^4的正整数,且宗教值不大于C。

Solution

因为板子是抄的另一个题的所以细节没改全WA了两次才过QAQ
对于这个题我们第一反应就是:诶这不是裸的树链剖分……
aaarticlea/jpeg;base64,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" alt="" />

等等好像不太对
这个每次询问只统计链上和起点终点同类的人
那样的话我们对于每一种搞一个链剖就好……
aaarticlea/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAC2AI4DASIAAhEBAxEB/8QAHQABAAMBAQEBAQEAAAAAAAAAAAUGBwgDBAkCAf/EAEYQAAEDBAECAwUGAgUICwAAAAECAwQABQYREgchEzFBCBQiUWEVFiMycZFSgUJiobHSFzNDV4KUwdMYNDZEY2d1srTC5P/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/8QAFhEBAQEAAAAAAAAAAAAAAAAAAAER/9oADAMBAAIRAxEAPwDqmlKrl+yWNY7zYLdKZfUu8SFxmnEAcW1pQV/Fs77gEDW6Cx0qkZPmcKJNgWmKXpEi7xprjEmKtKm2fd29qKlA7HcgDW+/nqs56S9W0NYjiEW+Q77ITOeTbTfH082nJalK0gqUrmr5ctEbB+R0G+0rJOqV+VFzDEYMn7z25hV5jNNTIKm0xpbjh0GXNrCinz38J7b8+1TvWa2uSsEvFwj3a722Va4EqYyq3TVx+a0tKUkL4/mG0jt+tBfqVQcJyJq3dGrFf8hluqbZtDMqVJeUpxavwwSonuVKJ/mSa8Me6lNXK92q3XSwXmyruzS3bauchsJkhKeRT8KiUL49+Ktf3UGi0rLJ8+Xl/V37vxJkiJZsaQzNuHu7qm1yZTnxMtKI/wBGEjkRvuexFfD1Uz+/Y7lWO221WS6mO9cm2nXm22VJnoLfItNFSthW+xJCfynvQbDSqNfM/jY9hn3jyC1XO2RxIQw5GfS2XW+SwkLISojj332JOvT0r5LT1PhzbpcrfOs91tUyLblXdlqYhAVJigkc0gKPE7H5VaP7HQaJSqC/1KtreP4hdzEmmPk0yPCioARyaW9viV/FrQ131uvPJOorNrvk61WmxXW/TLYymRcTb0o1FSoEpB5qHJZSCQkbOqDQqVQL8P8AKJ03auOIXWXDfebTOtsllwtkPI2UocHkU8gUqSdj9hUj0ryr76YHab4psNPSGyl5sDsh1CihYH05JJH0IoLdSlKBWZ9dLBfr3j1pfxFjx71a7ozPZb8RDfIJStKhtZA8lfP0rTKUGAYD00yHGcxnRXGEuYzAtD7Fqf8AGTyW++ljxE8eWwOaHDsgfm8yNa9V4HkaulnTKzC2n7Ss16iTJ7PjtfgtILpUrly0rXJPZJJ7+Vb1SgxbrFFzC/37H2rLhz8uFY73GuYlC4RmxJS2NlKUqWFJOyRsj0qe6hTMpuvT+Rb7dh0h6febfKiyGftCOn3FS0FCeSlKAXvkT8J/o/WtLpQYjExXJsm6GTMHvNkcsU2Nbo0aM+7MZeRJcbIV/oyooTttIO/RfbypguKEZHZH7r0/usCbBKlKuMjIFymGF8COTaC8oq5HQ1xGge/lW3UoMgshGK9f8kZuCShjLIsaTAeVoJU7HQULa3v82lFX6f2y3V6zXmc9i11sNvFzfst1RNdhh5LS3W+JSripWk7G96Jq7XazW68GGbpCYlmG+iVHLqAotOpO0rT8iKk6DKupEDIM36btMxrC/CuRuMd0wn5DJWltt1JKioK4+QJ1vdaFf7f9pWa4RG+CHZMVyOlwj8vJJH7d6k6UHN0TFuoMy0dObLLxhmHCxi7w3ZL5nNLW+htZ26gBXZAT5juolQ0OxqXyLBZ8HqLkV1fxm45Fabypp5tVtvC4TsZaUBKkOIDrYWD5g99eXrW9UoKJaXbT086Wofdt32DbbdGW+qCuT45ZUpSllvxCTyUVKI7E9zoelfL0Hss6x9MrU1dkeFcJZcnPNaI8MvLKwnR7ggEbHod1cbzZrbemmGrtBYmNR3kSWkPICghxP5VAfMd6lKBSlKBSleMhzwWHHCN8ElWt68hQe1KzXonKu99xGNk19vMic/d0l4RC2hDEVIWsBLYSAfLQJUTvVaVQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKrec2CPkuNyrfIkzIzaklXOI+Wl7CT2JHmO/dJ7H1qyUoKF0PnLuPSXGJK0NIUqGlGmkBCfhJT2SNAeXpV9qr4nh1nxR6Z9hNvxmJS+aopkLWy0dlR8NCiQjZUSQnQ8vkKtFApXNvtW5+5ZWWrFbHyiU9oyAP4dAj++uTzIUs+Kt1YWSORJ70H6hUrkD2ffv5dLLIZtFwXHtaV8UqcHmCO5Bra4vTeHKWheQT5N0lD4lF9ZWj9AKDVKVTmMFxltvSbFbgPUhrW/1r/JGD4ytnj9iwU7/AKQb0R9aC5UrKpmHXaz+I/iV1lc9EiM8dtjt6Vyt1UvGaNX9TGVypcfR22E9hQd/Ur89cE6mZFjl5iOJnvuQ/EAWlw77V3jil2avuPQbmxrw5LfMa/agmaUpQKUpQKUpQKUpQce+1xYXEZxEvDoPujzSUKUB5EJA71jmC4pOy/IGYUJBWFq/EVryTXeXUfFbZl9qdt15SUxyOXjfwVm3QDBImKZBfnYctE1kaS06O+vpQafgmMsYrjEW0NpBDKRy4j8xPzqalPsMfE+8ywhA2OawNV4XSS41CdcaJS4EniR37+lcuZhBjLvUl7LcnuD0l7fhwYDajx+W6Dp9+7srtz0uG6iYGkk6aUNmsohdX7nLnPRE4hcHWEr4qeCtgD5iv46JYLIgWpUxdzmmI9y4MPIKVaPz3UrfsVyaBKjHHZsRuI48PGUs6UE770GkWib9pW5p9LL7CiN+G52IrIPafw1zIsRF0t7JVLhn4wB3IrYorUiOwy284FpCAFKT5k/OvSfHTKjPRloBacRxUD5Gg/MoNPh9DXBSXeeuOu+6/QzohHeidKsbYk/55Ec8u2v6RrJsU6VWlXUe8maODjJS800R2CSr0/aujYrTbDCGmUBDaBxSkDWhQfTSlUvqdn9r6dWGPd70xNfjvSkxEpiIQpYWpC1AkKUka0g+vyoLpSq/heSW/L8YgX6zKdMKagrR4qOK0kKKVJUPmFJUDokduxI0asFApSlApSlBVM+uZtdjnyVAuJDYQlv5k1F9KbGbNjaS4ni7LWqQob8gruBWLe0lnlxj9QoWMRnPBiJLDjqwdlXL0Iro/HFIXZYK2VhxHhJHL+VB9MlHZKQriPM79RUQu02xt5c6REhgN/F460DaR8yal53f4RrkU61XPfUq85Jn1/kYrhW0wIivAmywogBWu438h3oNbiZZZZt6+y7fcGnpSklSUs9xoefrUvdGm5sJ2EpSW3OP5gvRT9a5hwO1z4ueOW/A2Q61EbMd27SNlJURpZA8tj0qyZMbThC5LUi/XG/ZRLPFptpfFIJ+aR8j6UG82tqVDjojOyEvqT5LSe+v1qb3+Hv1rml/OM9tH2d7w7b4yyUpRAIKnXwSP27V0VapD8q2tOymPd3lJ2pG9gfzoKJIki39Z3EPKSlM+3JDRV5ckE7/ALxWktBQQOZCla7ketcve1VcpdmybH5VqkeDIbbUOYPlsitc6RZ/AyPFbaJExBuIaCXgo9yobH/Cg0uq1meHWPNbU1bcngmdEaeEhLfjON6cCVJB2hQPkpXbeu9WWlBE4/ZoGP2mNabPEah26Kjw2WWx2SPM9z3JJJJJ2SSSSSTUtSlApSlApSlBw77VyvD6zTFp7KEOOR+oFWXol1uTZLc/bshK30o7tAEA/wBtVr2skKPWOWe3eEzrv/VrFidr77CfmPMUH6CKzKLlGBzrvj7qVOMNK+AEFSDr119K+DofFgudP23LaptciVydlK3tRWrzCj864wxzJZdkdQLNOdg+MktvJKtoII15etb57Jd9cYuV5saXFPMKUHkugdt+RoNlv2OSLPi4teHIZgKec4rkFO/DCz8Sv1GzXM2T2mx4/mcd6xTptwehHdwlHawhfqv9661zK0Sb7Y1W+NcHIPikBx5Hnx9R/MVkOV47c7dHax3CrTFiQ3lD3y6PpCyseqlE/wDGgxyO4pORzpd/us16eoByI80oacQf6XfyA+Q71sEzqrDwzAGxEuirxdXxpBUk6SfrusmGPNM5S9Z492TchHO2nePIIJ1tI9NVWuqbUKy31MS3PJfQpP454Dsr6VFsxWsyy+55VeHZl6dW4or/ACA9kgegr57LkFxtdyTIt762uZBKQTqoVTSitRSntvtXtGSQ+1v00Nb+tVH6kVnvXi/3LGOlV8vFkk+6XKN4Bae8NLnHk+2hXwqBB+FRHcetaFWMe0lheUZ3YbHaMZZhPRRcA7LU+74a2vhKUObPYtgLc5AAq/JxB70Fl6D3+5ZP0qsd4vcn3u5SfHLr3hpb5cX3EJ+FIAHwpA7D0rQqhcVscHGMdt1ktTfCDBZSy3sJClaHdauIAKlHalHQ2ST61NUClKisht791s78OLcZVsec48ZcXj4jelA9uQI760djyJoJWlUTo/e7lfcMS9e5CZVwjTJEJyQlAR43hOqQFlI7AkAbAq90GSdROiFizjJ3r3dJc5t9xtLZS0tISAlOh5pNVpv2XMP4J8W4XYqA78XUa/8AbXQFKDAv+i5hutCfeOJ/8VH+Grj036Q2XAZj8i0SpjynhxIfUk6H00BWmUoPlVHV/RUPTz71WM3wv72wFQpF0nQ4q+y0RHEp5D5HaTVxpQZLbOitttVtMK33m4tt72CUMlX1+LhuoKX7M+LzH1PSLreFuH1Ljf8Agrd6UGAj2W8M18U+8E+v4qP8Nf0j2YMRQpJTcrwAD2HNs/8A0rfKUClKUClKUClKiMgtLV7tD1ulOymWnynkuK+phwaUFdlpII8tHXmNj1oM56HWpp9WQZR476Jk66zmVR218IyUpf0CGk6TzPAbWdqOz371rtQ2N2S341Z41ps0ZMWBHBDbYJVrZJJJJJJJJJJOyTUzQKUpQKUpQKUpQKUpQKUpQKUpQKUpQKpHV+/z8Y6fz7jaFNJuPiMR2Fup5pQpx5DfIj10FE/rV3rMPaMQXelk1tK1NqXMhJC0+adyW+4+tB7M4dngaQHup0xTmviKbLDSCfoOJ1+9eqMMyp5Op3Um9LTv/u8CGydfqGz+9VK62rILV1GtNjmZ3kabTd4rnukoe78xLbO1NKPhcdFB2nyO0kd6uP3AvH+sTLP3i/8AJoJTD8TGNOS3nb7fbzIlceblzl+KEgb0EIACU+foN18/UvKVY1Ygm3o8e/XFXulsjA93H1dgo/1Eb5KPkAPrVb6PS7zNvuZpk3yZesfhzG4dvkSkIC1OIQfH0UpSCkKISD5HX67suYYxDlG7X4MOyLwm0vwoxKioNpKVE+GjyClE6JHcgAUGSY1lUnE7JHs0Xqbgi2onIFbzDry1qUoqUpSw98RKlEk/WpT/ACm3D/WZ08/3J7/nVE9P8sTFwmwRk59gcEMwWWzGlW8+MyQgApc3ITtQIIJ0NnvrvU/98/8AzN6bf7h/+mgsGGXnJ8iebk2/L8OutvZdQJaYEN0rCd9078Y8VEA6JH8jWo1iXSOW9cup+X3Bu5Wy8Rvc4bCp1rjlmMpwFw8RtagpQSe5Cj5gdqs3UJOWX6cMex9ly22hxnncL0lxIdKDvbEdO+zh1rmeyd/Og8bNepmY9TXnLZJfbxbHA5HccaXpufNWnipJ1+ZDSSfpyIPoK9erqLlakWnMLP7y+5YXFrmQGlf9ahrADw470VJCQsb/AITUBEzR7ArLZ7Sx04vVvguPt26E0JUZRceXspTsOEknSiVH6kmrIrN8lAJV03vxAHfUuIf7PFoLrablEvFsi3C3PIfhym0usupPZSSNg1AZVneMY867BvN9gQJxZK0svOhK9EHR1/Ks7wSRcLS3Dv2BW+VPwa9PKVJsrum5Fqf8QocUyCdcOYVyb32I2nsauXWSQpGHPW6ChtV1vKxbIyiByR4m/EWPX4Gw4v8A2aCr9DuoWPL6dY3a5eQxHr/7uUKiuP7eUsFRCTvvvWqdPIWaZritvyWdn0yCbi2XUxIVvjpbZHIgJBWlRPl5nvUJ7Ol6eiYhbsdviGC5Jty7haHwjRdZ5KDjRP8AGhXf6pUD6Gvn6O4pns3pnj8mzdR/sq3uMEsw/sGO/wCCOSu3NR2rvs7PzoNRsWCu269s3S4ZXk92eZBCGJcxKY42nWy02lIUe5891eawzppF6i5ND+05XUfjHj3B6M5FNjjHxUsulB+MEFPIJ+XbfrW50Cs361LMi1Y5aWkKW5dL/BY4p1sIQ54y1d/QJaJrSKol1xq6XHqFHyCS9EVb7TCWi1RSpXeU4CFuu9tABOkjW+xJ7UErnmMRctsLtvkuLjvtrTIiS2/zxX0HaHU/UH9xsVirnVC/ZTLjdPWH4VsyB15cO43xmSgx+CNcjGO/idUk649ikn+ab29gmWZWCjPsoS3bl/ntFiSphlwfwreV+ItJ9R2q1yMCxaRi6MdesME2YfljBvQSf4gR3Cv629/WgkcVsNvxiwQrNZ2AxBiN8G0+p9Son1USSSfUk1F5rnFnxFtpue46/cpOxDt0VBdkylfwoQO/n6nQ+tV6PiOZ40+0nFMnbuVq5gKgZAFOKaRvuG5CBz7DsAoHyHepnKPvK3fGnsWsNhkumP4arjcZSmnEfEfw9IbUopHZX5u+z2HmQyJJvI6kKvWfTRidzmI93tXixGpUJttWiWg6VcUv73yJ1v0Ou1XvKETsWtip18z2HGjHs2DZ2FLdPolCQdrUfkAa9rpiecZRBdgZHkVkhW18FL8W22vxitP8PN9Sh8u/D9AKiIvQiDZJMC4Ypf7nBvEFrwWJE1DU5sJ3v/NrSOP+wU62dUFo6RSMqk4wuXmTSG5L76lxWvdksOpY7cS6hJISs+evTeifloFZ7bU9Sod0jouSsUulsK0h19rx4shKd/EeOlpJ1ogbHft9amc3iZPPgx4uJXG32t51wpkTJTKnlst8T3aR+VS96/Mda3QVjKJCcj6u4vYYfF1qxFd5uKvMNKLam46N+XIlala89DdaapQSkqUQEgbJPpVZwrD4WI2t6NBcfkTJLhflzpJ5vSXj5rWfX6DyFVeZA6soaXCYuuHzGHE+H76/GkMPJB7FXhpKkE63obA3qg9/Z1aLXRjGSVlxbjTrylqOyVLecWdn9VGvvm45OnZ69kF0cZNtt1vXHtkdCiVBxwfjPL7dlaAQNE9t/Op3CLE3i+JWixtO+KIEZDHicePMgd1a9NnZ1UxJQXY7rYIBWkpBP1FBiGDNWqL7PeOZJco4VJsFtkzIjgUUqQspcSQNEb5A60exOvlWidIra5Z+mWLwXm/Cfat7JcQfNK1JClA/XZNUy3dM7w9g2F4pdpUJNmt58W8MtlS1S1IXzaaTsAeHyJKie/wjVbGAANDsKDN+gf8A2Mn/APrVw/8AkLrSap3TPHJeMWCTBnLZW65cJUoFpRICHHlLSO4HfRG6uNApSlApSlApSlApSlApSlApSlApSlApSlApSlB//9kA" alt="" />

等等好像还是不太对
空间开不开啊QAQ
那咱就线段树动态开点好了。
分析一波复杂度:需要动态开点的只有我代码里的update函数,每次一update最差情况会新增log个节点
那样的话空间就是NlogN的了。
搞定

Code

 #include<iostream>
#include<cstring>
#include<cstdio>
#define N (2000000+100)
using namespace std; struct segt{int val,add,max,ls,rs;}Segt[N<<],refun[N];
struct node{int to,next;}edge[N<<];
int n,m,a[N],u,v,l,ans,w[N],c[N],Root[N],x,y;
int head[N],num_edge;
int Father[N],Depth[N],Son[N],Sum[N];
int T_num[N],Tree[N],Top[N],dfs_num,segt_num;
char opt[]; void add(int u,int v)
{
edge[++num_edge].to=v;
edge[num_edge].next=head[u];
head[u]=num_edge;
} void Dfs1(int x)
{
Sum[x]=;
Depth[x]=Depth[Father[x]]+;
for (int i=head[x]; i; i=edge[i].next)
if (edge[i].to!=Father[x])
{
Father[edge[i].to]=x;
Dfs1(edge[i].to);
Sum[x]+=Sum[edge[i].to];
if (!Son[x] || Sum[Son[x]]<Sum[edge[i].to])
Son[x]=edge[i].to;
}
} void Dfs2(int x,int pre)
{
T_num[x]=++dfs_num;
Tree[dfs_num]=a[x];
Top[x]=pre;
if (Son[x]) Dfs2(Son[x],pre);
for (int i=head[x]; i; i=edge[i].next)
if (edge[i].to!=Father[x] && edge[i].to!=Son[x])
Dfs2(edge[i].to,edge[i].to);
} void Pushup(int now)
{
Segt[now].val=Segt[Segt[now].ls].val+Segt[Segt[now].rs].val;
Segt[now].max=max(Segt[Segt[now].ls].max,Segt[Segt[now].rs].max);
} void Update(int &now,int l,int r,int x,int k)
{
if (!now) now=++segt_num;
if (l==r)
{
Segt[now].val=k;
Segt[now].max=k;
return;
}
int mid=(l+r)>>;
if (x<=mid) Update(Segt[now].ls,l,mid,x,k);
else Update(Segt[now].rs,mid+,r,x,k);
Pushup(now);
} int Query_Sum(int now,int l,int r,int l1,int r1)
{
if (now==) return ;
if (l>r1 || r<l1) return ;
if (l1<=l && r<=r1)
return Segt[now].val;
int mid=(l+r)>>;
if (r1<=mid) return Query_Sum(Segt[now].ls,l,mid,l1,r1);
if (l1>=mid+) return Query_Sum(Segt[now].rs,mid+,r,l1,r1);
return Query_Sum(Segt[now].ls,l,mid,l1,r1)+Query_Sum(Segt[now].rs,mid+,r,l1,r1);
} int Query_Max(int now,int l,int r,int l1,int r1)
{
if (now==) return -;
if (l>r1 || r<l1) return -;
if (l1<=l && r<=r1)
return Segt[now].max;
int mid=(l+r)>>;
if (r1<=mid) return Query_Max(Segt[now].ls,l,mid,l1,r1);
if (l1>=mid+) return Query_Max(Segt[now].rs,mid+,r,l1,r1);
return max(Query_Max(Segt[now].ls,l,mid,l1,r1),Query_Max(Segt[now].rs,mid+,r,l1,r1));
} int Ask_Sum(int x,int y)
{
int fx=Top[x],fy=Top[y],r=c[x],ans=;
while (fx!=fy)
{
if (Depth[fx]<Depth[fy])
swap(x,y),swap(fx,fy);
ans+=Query_Sum(Root[r],,n,T_num[fx],T_num[x]);
x=Father[fx],fx=Top[x];
}
if (Depth[x]<Depth[y]) swap(x,y);
ans+=Query_Sum(Root[r],,n,T_num[y],T_num[x]);
return ans;
} int Ask_Max(int x,int y)
{
int fx=Top[x],fy=Top[y],r=c[x],ans=;
while (fx!=fy)
{
if (Depth[fx]<Depth[fy])
swap(x,y),swap(fx,fy);
ans=max(ans,Query_Max(Root[r],,n,T_num[fx],T_num[x]));
x=Father[fx],fx=Top[x];
}
if (Depth[x]<Depth[y]) swap(x,y);
ans=max(ans,Query_Max(Root[r],,n,T_num[y],T_num[x]));
return ans;
} int main()
{
scanf("%d%d",&n,&m);
for (int i=; i<=n; ++i)
scanf("%d%d",&w[i],&c[i]);
for (int i=; i<=n-; ++i)
{
scanf("%d%d",&u,&v);
add(u,v); add(v,u);
}
Dfs1(); Dfs2(,);
for (int i=; i<=n; ++i)
Update(Root[c[i]],,n,T_num[i],w[i]); for (int i=; i<=m; ++i)
{
scanf("%s%d%d",opt,&x,&y);
if (opt[]=='C' && opt[]=='C')
{
Update(Root[c[x]],,n,T_num[x],);
c[x]=y;
Update(Root[c[x]],,n,T_num[x],w[x]);
}
if (opt[]=='C' && opt[]=='W')
{
w[x]=y;
Update(Root[c[x]],,n,T_num[x],w[x]);
}
if (opt[]=='Q' && opt[]=='S')
printf("%d\n",Ask_Sum(x,y));
if (opt[]=='Q' && opt[]=='M')
printf("%d\n",Ask_Max(x,y));
}
}

BZOJ3531:[SDOI2014]旅行(树链剖分)的更多相关文章

  1. BZOJ3531 SDOI2014 旅行 - 树链剖分,主席树

    题意:给定一棵树,树上每个点有权值和类型.支持:修改某个点的类型:修改某个点的权值:询问某条链上某个类型的点的和/最大值.点数/类型数/询问数<=100000. 分析: 树链剖分,对每个类型的点 ...

  2. BZOJ3531 [Sdoi2014]旅行 树链剖分 线段树

    原文链接:http://www.cnblogs.com/zhouzhendong/p/8080189.html 题目传送门 - BZOJ3531 题意概括 一棵树,n个节点,每一个节点两个值,一个颜色 ...

  3. BZOJ3531[Sdoi2014]旅行——树链剖分+线段树

    题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰.为了方便,我们 ...

  4. BZOJ 3531: [Sdoi2014]旅行 [树链剖分]

    3531: [Sdoi2014]旅行 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1685  Solved: 751[Submit][Status] ...

  5. P3313 [SDOI2014]旅行——树链剖分+线段树(动态开点?)

    P3313 [SDOI2014]旅行 一棵树,其中的点分类,点有权值,在一条链上找到一类点中的最大值或总和: 树链剖分把树变成链: 把每个宗教单开一个线段树,维护区间总和和最大值: 宗教很多,需要动态 ...

  6. BZOJ 3531 [Sdoi2014]旅行 树链剖分+动态开点线段树

    题意 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰. 为了方便,我们用 ...

  7. 洛谷P3313 [SDOI2014]旅行(树链剖分 动态开节点线段树)

    题意 题目链接 Sol 树链剖分板子 + 动态开节点线段树板子 #include<bits/stdc++.h> #define Pair pair<int, int> #def ...

  8. BZOJ 3531 SDOI2014 旅行 树链剖分+线段树动态开点

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3531 题意概述: 给出一棵N个点的树,树上的每个结点有一个颜色和权值,支持以下四种操作: ...

  9. 【BZOJ3531】[Sdoi2014]旅行 树链剖分+动态开点线段树

    [BZOJ3531][Sdoi2014]旅行 Description S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天 ...

随机推荐

  1. 2.3 if switch for等流程控制

    if条件中可以写多个语句,语句的作用域仅限于if,不可在if之外的地方使用 package main import ( "fmt" "io/ioutil" ) ...

  2. ionic 开发当中,有一些常用的方法。

    在开发项目的时候,有些常用的功能封装到一个类里. 以后要用的话,直接导入过来就可以用了,有一些方法是从网站复制过来的,有些方法是网上复制过来,然后自己修改了一下,标记一下吧!   /**      * ...

  3. 使用urllib和http.cookiejar获取python老男孩学员成绩

    打开http://crm.oldboyedu.com/crm/grade/single/ 鼠标右键查看源代码,可以看到我们需要post的name.如下: 这里需要在post试提交token和searc ...

  4. 深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP

    前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第5篇,依赖倒置原则LSP(The Dependency Inversion Principle ). 英文原文:htt ...

  5. [转](.NET Core C#) AES Encryption

    本文转自:https://www.example-code.com/dotnet-core/crypt2_aes.asp Chilkat.Crypt2 crypt = new Chilkat.Cryp ...

  6. BulletedList项目控件基础CSS基础

    呈现形态&控件语法: <ul id=“...”> <li></li> . <li></li> . <li></li ...

  7. js.css嵌入dll

    处理请求,返回 public ActionResult Get() { //传递一个部分名称 var n = Request["n"]; n = n.Replace('/', '. ...

  8. [Linq To Sql]解决join时的Collation冲突

    背景 现在两表 A:

  9. Java日志框架解析及实战分析

    转载自: https://zhuanlan.zhihu.com/p/24272450 https://zhuanlan.zhihu.com/p/24275518 作为Java程序员,幸运的是,Java ...

  10. Maven之依赖关系

    在maven的管理体系中,各个项目组成了一个复杂的关系网,但是每个项目都是平等的,是个没有贵贱高低,众生平等的世界,全球每个项目从理论上来说都可以相互依赖.就是说,你跟开发Spring的大牛们平起平坐 ...