COGS 2278 樹黑白(動態樹分治)

2021-08-06 05:16:18 字數 1062 閱讀 1527

傳送門:cogs-2278

題意:給定一棵樹,要求維護以下操作:

1、m u 將u節點反色

2、q u 查詢u到所有黑色節點距離和

題解:動態樹分治,更新時判斷一下原本是黑色還是白色,是黑色就減去u與根的距離,是白色就加上

#includeusing namespace std;

const int mx = 2e5 + 5;

const int mxm = mx * 40;

struct edge e[mx * 2];

struct root root[mxm];

int head[mx], fir[mx];

int c[mx], vis[mx], sz[mx], id[mx];

int sum[mx << 1], num[mx << 1];

int n, m, tot, cnt, rear;

void init()

void add_edge(int u, int v, int w)

void add_root(int u, int rt, int subrt, int dis)

void dfs_size(int u, int fa, int tot, int &rt)

if (!rt && sz[u] * 2 > tot) rt = u;

}void dfs_tree(int u, int fa, int rt, int subrt, int dir)

}void dfs(int u)

for (int i = head[rt]; ~i; i = e[i].nxt)

}int query(int u)

return ret;

}void update(int u)

c[u] ^= 1;

}int main()

dfs(1);

char op[2];

for (int i = 1, u; i <= m; i++)

return 0;

}

動態樹之(霧)樹鏈剖分

這貨是不是動態樹里的我就不清楚了,fhq的blog好像有提到orz 一些不需要link cut操作的樹上路徑的題可以用樹鏈剖分做,常數比lct小多了。upd 所以這已經不是動態樹了囧。標題我就不改了。還好原來機智打了個 霧 學習了下hld 樹鏈剖分 嗯,挺簡單的。hld可以在樹中的操作有很多,hld...

COGS 2258 復仇的序幕曲(動態樹分治)

傳送門 cogs 2258 題意 在一棵n個節點的樹上進行m次詢問 與u的距離不超過t的節點權值和 題解 動態樹分治 每一層子樹把節點按與根節點的距離排序,記錄一下字首和 includeusing namespace std const int mx 8e4 5 const int mxm mx 4...

樹鏈剖分 BZOJ3589 動態樹

time limit 30 sec memory limit 1024 mb submit 543 solved 193 submit status discuss 別忘了這是一棵動態樹,每時每刻都是動態的.小明要求你在這棵樹上維護兩種事件 事件0 這棵樹長出了一些果子,即某個子樹中的每個節點都會長...