51nod 1405 樹的距離之和 樹形dp

2022-02-19 09:03:08 字數 1451 閱讀 8938

1405 樹的距離之和

基準時間限制:1 秒 空間限制:131072 kb 

收藏關注給定一棵無根樹,假設它有n個節點,節點編號從1到n, 求任意兩點之間的距離(最短路徑)之和。

input

第一行包含乙個正整數n (n <= 100000),表示節點個數。

後面(n - 1)行,每行兩個整數表示樹的邊。

output

每行乙個整數,第i(i = 1,2,...n)行表示所有節點到第i個點的距離之和。
input示例

4

1 23 2

4 2

output示例

535

5

思路:dp[i]表示以1為根,以i為子樹的所有子節點到i的最短距離之和;

dfs遍歷求dp陣列,和以i為子樹的節點數和si;

dfs2求總父親節點來的價值;

#pragma comment(linker, "/stack:1024000000,1024000000")#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define ll long long

#define bug(x) cout<

int n=1e5+10,m=1e6+10,inf=1e9+10,mod=1e9+7

;const ll inf=1e18+10,mod=1e9+7

;const

double eps=(1e-8),pi=(4*atan(1.0

));struct

isedge[n

<<1

];int

head[n],edg;

void add(int u,intv);

head[u]=edg;

}ll ans[n],a[n];

intsi[n];

void dfs(int u,int

fa)}

intn;

void dfs2(int u,int

fa,ll now)

}int

main()

dfs(

1,0);

dfs2(

1,0,0

);

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

printf(

"%lld\n

",ans[i]);

return0;

}

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