BZOJ 3052 糖果公園

2021-07-25 13:42:51 字數 2064 閱讀 2702

uoj 58

把樹轉化為尤拉序,把詢問對映到尤拉序上,在尤拉序上跑帶修改莫隊。

具體的做法可以參考《國家集訓隊2014**集.pdf>的第82頁描述的性質。

#include 

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 200010;

int n, m, qq, uu, vv, qcnt, tmp, ccnt, dcnt, blsz, l, r, tm;

int c[maxn], bl[maxn];

int ne[maxn], po[maxn], fa[maxn], dep[maxn], sz[maxn], dfn[maxn*2];

int son[maxn], top[maxn], in[maxn], out[maxn], vnum[maxn];

long

long ans[maxn], res, v[maxn], w[maxn];

vector

head[maxn];

bool is[maxn];

struct nodeq[maxn];

inline

bool cmp(const node a, const node b)else

return bl[a.l] < bl[b.l];

}inline

int gt()

}void dfs1(int x) son[x] = sznum;

dfn[out[x] = ++dcnt] = x;

}void dfs2(int x, int tp)

}int lca(int u, int v)

void add(int x)

void del(int x)

void xor(int x)

int main() dfs1(1), dfs2(1, 1);

blsz = max(1.0, pow(dcnt, 2.0/3));

for(int i = 1; i <= dcnt; i ++) bl[i] = (i-1)/blsz + 1;

for(int i = 1; i <= n; i ++) c[i] = gt();

for(int i = 1; i <= qq; i ++)else

q[qcnt].id = qcnt, q[qcnt].time = ccnt;

}else po[++ccnt] = gt(), ne[ccnt] = gt();

}sort(q+1, q+1+qcnt, cmp);

l = 1, r = 0, tm = 0;

for(int i = 1; i <= qcnt; i ++)

swap(c[po[tm+1]], ne[tm+1]);

if((in[po[tm+1]] <= r && in[po[tm+1]] >= l)^

(out[po[tm+1]] <= r && out[po[tm+1]] >= l))

} for( ; tm > q[i].time; tm --)

swap(c[po[tm]], ne[tm]);

if((in[po[tm]] <= r && in[po[tm]] >= l)^

(out[po[tm]] <= r && out[po[tm]] >= l))

}for( ; l > q[i].l; l --) xor(dfn[l-1]);

for( ; r < q[i].r; r ++) xor(dfn[r+1]);

for( ; l < q[i].l; l ++) xor(dfn[l]);

for( ; r > q[i].r; r --) xor(dfn[r]);

if(q[i].lca != 0)else ans[q[i].id] = res;

}for(int i = 1; i <= qcnt; i ++) printf("%lld\n", ans[i]);

return

0;}

bzoj 3052 糖果公園

題意 給出一顆n個結點的樹,每個結點上有一種糖果 1,m 乙個人經過這個結點品嚐糖果j獲得的愉悅度為w time j val j 其中time j 指j的品嚐次數 給出q次操作,操作有兩種 1 更改某結點的糖果種類 2 查詢某兩個結點路徑上的愉悅度總和 題解 250s的神題,orz各位神犇 將樹分塊...

BZOJ3052 糖果公園

0 題目鏈結 1 題目大意 給定一顆n個點的無根樹,每個點有乙個顏色,要進行q次操作,有兩種操作,顏色總數是m。a query操作,給定起始點和終點,對於這條路徑,從起始點出發,對於沿途的點,如果這個點的顏色j是第i次出現,那麼對於這個詢問的答案的貢獻是vi?wj。b change操作,每次修改乙個...

BZOJ 3052 糖果公園 樹上帶修改莫隊

time limit 200 sec memory limit 512 mb submit 1264 solved 637 submit status discuss sample input 84131 2784 submit status discuss home back 這道題我很快的寫完了...