1. 程式人生 > >子樹的結點個數

子樹的結點個數

現在 name con using 輸入 return space pac 多少

有一個棵樹,樹上有 n 個結點。結點的編號分別為 1…n,其中 1 是樹的根結點。現在希望你幫忙計算每個結點作為根結點的子樹分別有多少結點。
輸入格式
第一行輸入一個數字 n,代表樹上結點的個數。(2≤n≤1000)接下來的 n?1 行,每行倆個數字 a,b,代表結點 a 到結點 b 有一條邊。
輸出格式
按編號順序輸出每個結點作為根結點的子樹,分別有多少結點,中間用空格分開。
樣例輸入
5
1 4
1 3
3 2
3 5
樣例輸出
5 1 3 1 1


#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5+10;
const int INF = 0x3f3f3f3f;
vector<int> G[maxn];
int dfs(int cur) //dfs(cur)——>搜索cur為根的子樹的結點
{
    int cnt=1;
    for(int i=0;i<G[cur].size();i++)
    {
        cnt += dfs(G[cur][i]); //計算子數結點,cnt累加子孫點
    }
    return cnt;
}
int main()
{
    int u,v;
    int n;
    cin>>n;
    for(int i=1;i<n;i++)
    {
        cin>>u>>v;
        G[u].push_back(v); //有向邊
    }
    for(int i=1;i<=n;i++)
    {
        cout<<dfs(i)<<' '; //1~n每個結點作為根結點的子樹,分別有多少結點
    }
}

子樹的結點個數