洛谷P3258 JLOI 2014松鼠的新家

2022-03-17 15:02:55 字數 709 閱讀 5463

題目

樹上差分

樹上點差分,注意會出現路徑端點多記錄的情況,這時需要在最後輸出的時候輸出子樹的差分陣列的和-1,而不是在處理原資料的時候減1。並且a[n]不需要糖果,最後也減去就行。

#include #define n 1001011

using namespace std;

struct edg e[n];

int n, a[n], cnt, lin[n], fa[n][19], dep[n], sum[n];//sum[i]乃差分陣列。

inline void add(int f, int t)

void dfs(int now, int f)

} int dfs2(int now)

return sum[now];

} inline void init()

int lca(int u, int v)

int main()

init();

for (int i = 2; i <= n; i++)

dfs2(1);

for (int i = 2; i <= n; i++)

sum[a[i]]--;

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

printf("%d\n", sum[i]);

return 0;

}

洛谷P3258 JLOI2014 松鼠的新家

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

洛谷P3258 JLOI2014 松鼠的新家

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

P3258 JLOI2014 松鼠的新家

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