JLOI2014 松鼠的新家(樹上差分)

2022-05-23 22:42:11 字數 1082 閱讀 9995

其實沒有什麼好說的,這個題就屬於那種看起來沒什麼細節,實際也沒有什麼細節的題,但是卻把我埋了,關於這道題的細節請讀者自悟

然後就是樹上差分,適用於多次操作一次查詢的題

把路徑$(u, v)$的邊權加$val$的操作:

#include #include 

#define re register

using

namespace

std;

inline

intread()

const

int maxn = 300005

;int

n, diff[maxn], ord[maxn], num[maxn];

struct

edge e[maxn

<< 1

];int cnte = 1

, head[maxn];

inline

void add_edge(int i, int j)

int dep[maxn], anc[maxn][21

];void dfslca(int u, int

fa)

}inline

int lca(int x, int

y) void dfs(int u, int

fa)

}int

main()

dfslca(

1, 0

);

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

for (int u = 1; u <= n; ++u) anc[u][i] = anc[anc[u][i - 1]][i - 1

];

for (re int i = 1; i < n; ++i)

dfs(

1, 0

);

for (int i = 1; i <= n; ++i) printf("

%d\n

", (num[i] == 1) ? diff[i] : (diff[i] - 1

));

return0;

}

JLOI2014 松鼠的新家

裸的 樹鏈剖分 然而 並不用線段樹 求x,y的lca 後 在 x上標記加一,y上標記加一 lca標記減一,fa lca 標記減一 include int n int shunxv 300005 int to 600005 next 600005 head 600005 cnt void add in...

JLOI2014 松鼠的新家

time limit 10 sec memory limit 128 mb submit 1736 solved 840 松鼠的新家是一棵樹,前幾天剛剛裝修了新家,新家有n個房間,並且有n 1根樹枝連線,每個房間都可以相互到達,且倆個房間之間的路線都是唯一的。天哪,他居然真的住在 樹 上。松鼠想邀請...

JLOI2014 松鼠的新家

松鼠的新家是一棵樹,前幾天剛剛裝修了新家,新家有n個房間,並且有n 1根樹枝連線,每個房間都可以相互到達,且倆個房間之間的路線都是唯一的。天哪,他居然真的住在 樹 上。松鼠想邀請小熊維尼前來參觀,並且還指定乙份參觀指南,他希望維尼能夠按照他的指南順序,先去a1,再去a2,最後到an,去參觀新家。可是...