子樹的結點個數
阿新 • • 發佈:2018-06-09
現在 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每個結點作為根結點的子樹,分別有多少結點 } }
子樹的結點個數