51Nod 1405 樹的距離之和 樹dp

2022-04-10 02:17:50 字數 913 閱讀 2644

中文題面不解釋了,兩次dfs,第一次自下向上,第二次自上向下。

ans[i]表示i節點的答案,cnt[i]表示i節點為root的子樹的節點個數,d[i]表示i節點為root的子樹的答案。

1

//#pragma comment(linker, "/stack:102400000, 102400000")

2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include

12 #include 13

using

namespace

std;

14 typedef long

long

ll;15 typedef pair p;

16const

int n = 1e5 + 5;17

ll cnt[n], d[n], ans[n], n;

18 vector edge[n];

1920

void dfs1(int u, int

p) 31}32

33void dfs2(int u, int

p) else

39for(int i = 0; i < edge[u].size(); ++i) 45}

4647

intmain()

4854

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

59 dfs1(1, -1

);60 dfs2(1, -1

);61

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

65return0;

66 }

51nod 1405 樹的距離之和

給定一棵無根樹,假設它有n個節點,節點編號從1到n,求任意兩點之間的距離 最短路徑 之和。input 第一行包含乙個正整數n n 100000 表示節點個數。後面 n 1 行,每行兩個整數表示樹的邊。output 每行乙個整數,第i i 1,2,n 行表示所有節點到第i個點的距離之和。input示例...

51Nod 1405 樹的距離之和

acm模版 根據題意,這是一顆樹,所以每兩點之間的路徑一定是唯一的。這裡讓求所有點到第i個結點的距離和,其實也就是其他所有結點到第i個結點的距離和。通過觀察發現,只要我們找到了乙個點對應的結果,那麼其他所有的點都可以通過這個結果擴充套件出來,利用邊的關係。比如說,我們知道了第乙個結點對應的結果,並且...

51nod 1405 樹的距離之和

給定一棵無根樹,假設它有n個節點,節點編號從1到n,求任意兩點之間的距離 最短路徑 之和。input 第一行包含乙個正整數n n 100000 表示節點個數。後面 n 1 行,每行兩個整數表示樹的邊。output 每行乙個整數,第i i 1,2,n 行表示所有節點到第i個點的距離之和。input示例...