zoukankan      html  css  js  c++  java
  • 子树的结点个数

    有一个棵树,树上有 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


    【分析】:为什么不用fa或者vis数组标记以免重复计算?因为这是有向图!那么只会往一个方向走。

    #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每个结点作为根结点的子树,分别有多少结点
        }
    }
    
  • 相关阅读:
    RPC的入门
    Https的实现原理
    Celery
    Flask信号
    Redis安装
    python之递归
    python之三元表达式和生成式
    python第十八天作业
    python之生成器
    python之迭代器
  • 原文地址:https://www.cnblogs.com/Roni-i/p/9158088.html
Copyright © 2011-2022 走看看