51nod 1405 樹的距離和

2021-08-04 12:49:25 字數 820 閱讀 4341

題意:

有n個節點的無根樹,求每個節點分別到其他n-1個節點的距離之和。

思路:

設dp[x]表示節點x到其他n-1個節點的距離和。

乙個dp[x]是很好求的,把x當成根,一遍dfs,把所有點的深度加起來,就可以求出dp[x]。

得知dp[x]如何求得dp[y]呢?此時x是父節點,y是兒子節點。我們再增加乙個兒子節點z,這三個點的聯絡為y–x–z。知道dp[x],求dp[y],那麼,等於dp[y] = dp[x]-son[y]+(n-son[y]),dp[x]即減去y子節點的個數,再加上非y子節點得到個數。

**:

#include 

#include

#include

#include

using

namespace

std;

const

int maxn = 1e5+5;

vector

edges[maxn];

int n, a, b;

bool vis[maxn];

int son[maxn];

long

long dp[maxn];

void dfs1(int rt, int depth)

}}void dfs2(int rt)

}} int main()

dfs1(1, 0);

memset(vis, 0, sizeof(vis));

dfs2(1);

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

return

0;}

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示例...