51nod 1405 樹的距離之和(樹型dp)

2021-07-22 09:42:26 字數 868 閱讀 5567

中文題目

考慮還是不能乙個個點去思考,而是看邊與所求的關係,還是菜菜的。

num[i]記錄i有多少個子節點,dp[i]表示所有點到i的距離和,dep[i]表示i的深度,結點u,對於它的子節點x,x的子節點到x的距離比到u的距離少1,除了x,u以外的點到x的距離比到u的距離多一,所以dp[x]=dp[u]-num[x]-(n-2-num[x]),根節點根據深度就可以求出,然後就可以求出所有。

#include 

#include

#include

#include

#include

#include

using

namespace

std ;

typedef

long

long ll;

const

int maxn=100010;

int tot,head[maxn],n;

struct node

edge[maxn*2];

void addedge(int from,int to)

int num[maxn],dep[maxn];

ll dp[maxn],tol;

void dfs1(int u,int fa,int depth)

}void dfs2(int u,int fa)

}int main()

dfs1(1,-1,0);

dp[1]=tol;

dfs2(1,-1);

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

printf("%i64d\n",dp[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示例...