计蒜客 子树的结点个数

计蒜客 子树的结点个数

问题回放

问题描述
有一个棵树,树上有 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

问题分析

身为菜鸡的我,做了好久计蒜客,但只会做过于简单的题目找不到写的,今天总算遇见个自己可以写点东西的题
其实也不难
刚遇到这个题有点懵,以前做题都是拿个矩阵存起来(邻接表这东西大家都不喜欢吧)
可是问题来了怎么存啊,谁是父,谁是儿子,这是个误区,没有分清树和图的区别,树没有回路,如果从根节点dfs只能从父到子,所以就都存了一下,然后dfs,把路走出来;
搞个数用的是有返还值的dfs,第一次是想每做一次,把直接与子树根节点连接的边登记一下,然后多次dfs每次求一个点的子树节点,优化嘛,想到重复的计算太多,于是加了一个数组登记了一下,搞完收工。

我是菜鸡,刚开始接触算法,谢谢提意见,不要喷我

#include<stdio.h>
int n;
int t[1005][1005];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值