傳送門: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 這棵樹長出了一些果子,即某個子樹中的每個節點都會長...