东方博宜OJ 2165:子结点的数量(2)← 邻接表 or 链式前向星

【题目来源】
https://oj.czos.cn/p/2165

【题目描述】
给定一棵树中的若干父结点和子结点的关系描述(结点 1 是树根),请问该树中,每个结点有多少个子结点。
比如:读入父子关系如下(请注意:本题读入的两个数 x y,不保证 x 是 y 的父)。

1 2
2 3
2 4

因此每个结点的子结点的数量分别是:1 2 0 0。

【输入格式】
第 1 行,读入一个整数 n,表示树中结点的数量,树中的结点编号也是 1~n。(n≤100)
接下来 n-1 行,每行有一对父子关系 x y,不保证 x 是 y 的父。
输入数据保证一定合法,能够形成一棵树,且不存在重复的父子关系的读入。

【输出格式】
输出 n 个数,用空格隔开,表示按照编号从小到大的顺序,输出每个结点子结点的数量。​​​​​​​

【输入样例】
4
1 2
2 3
2 4​​​​​​​

【输出样例】
1 2 0 0

【数据范围】
n≤100

【算法分析】
● 链式前向星、邻接表
链式前向星:https://blog.csdn.net/hnjzsyjyj/article/details/139369904
邻接表(无向无权图):https://blog.csdn.net/hnjzsyjyj/article/details/101233779
邻接表(有向无权图):https://blog.csdn.net/hnjzsyjyj/article/details/101233485

● 链式前向星在算法竞赛中是‌最常用‌的图存储方法,尤其在处理大规模稀疏图时,其空间和时间效率优势显著。邻接表虽简单直观,但在竞赛中已逐渐被链式前向星取代

● 注意:由于无权图的邻接表代码简单直观,所以在处理无权图时,可以选择邻接表。

● 本题与东方博宜OJ 2164:子结点的数量(https://blog.csdn.net/hnjzsyjyj/article/details/155679814)的区别在于“每对儿关系 x y 中,不保证 x 是 y 的父”。所以,在输出节点的孩子节点数量时,要区分根节点及非根节点。

【算法代码一:邻接表

#include <bits/stdc++.h>
using namespace std;

const int N=1e2+5;
vector<int> v[N];

int main() {
    int n;
    cin>>n;

    int x,y;
    for(int i=1; i<n; i++) {
        cin>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
    }

    for(int i=1; i<=n; i++) {
        if(i==1) cout<<v[i].size()<<" "; //root
        else cout<<v[i].size()-1<<" "; //Remove parent's connection
    }

    return 0;
}

/*
in:
4
1 2
2 3
2 4

out:
1 2 0 0
*/

【算法代码二:链式前向星

#include <bits/stdc++.h>
using namespace std;

const int N=1e2+5;
int e[N],ne[N],h[N],idx;

void add(int a,int b) {
    e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}

int main() {
    memset(h,-1,sizeof h);
    int n,x,y;
    cin>>n;
    for(int i=1; i<n; i++) {
        cin>>x>>y;
        add(x,y),add(y,x);
    }

    for(int i=1; i<=n; i++) {
        int cnt=0;
        for(int j=h[i]; j!=-1; j=ne[j]) {
            cnt++;
        }
        if(i==1) cout<<cnt<<" "; //root
        else cout<<cnt-1<<" "; //Remove parent's connection
    }

    return 0;
}

/*
in:
4
1 2
2 3
2 4

out:
1 2 0 0
*/







【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/155679814
https://blog.csdn.net/hnjzsyjyj/article/details/145989802
https://blog.csdn.net/hnjzsyjyj/article/details/101233485
https://blog.csdn.net/hnjzsyjyj/article/details/101233779
https://blog.csdn.net/hnjzsyjyj/article/details/139369904

 

posted @ 2025-12-08 10:09  Triwa  阅读(3)  评论(0)    收藏  举报