C++——树的统计(附毒瘤数据)

该博客介绍了如何使用C++解决统计森林中树数量的问题。通过分析输入格式和输出格式,博主分享了处理毒瘤数据的经验,包括环形结构和越界数据。通过三次尝试,最终使用思维题的方法实现AC代码,得到了正确答案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

输入森林中的节点关系,统计森林中树的数量,输出树的根。

输入格式

第1行:输入两个整数n, k

第2~k+1行:每行两个节点编号:i, j  i是j的父节点

输出格式

第一行:树的数量

第二行:依次输出森林中树的根节点编(从小到大)

样例

输入:

9 7
1 2
2 3
4 6
4 5
7 8
9 1
9 4

输出:

2
7 9

数据范围与提示:

n<=100
k<=100
i<=100
j<=100

(毒瘤数据)

63 12
61 22
46 43
48 94
49 27
28 70
95 70
45 45
36 26
84 61
77 81
22 57
12 97

数据很烦,有形成环的,甚至有越界的(一共一百个测试点)

第一次用并查集得了74分,后来猛然发现这是一道思维题——只要在范围内的某个点不是另一个点的子结点,那么TA一定就是根节点!!!

第二次,可惜数据太毒瘤,只得了85分……

第三次,不成功便成仁,AC!~~~

AC Code:

#include <bits/stdc++.h>
#define Maxn 105
using namespace std;
int n, k, a, s, b, x[Maxn];
bool p[Maxn];
int main() {
    scanf("%d %d", &n, &k);
    n = abs(n);
    k = abs(k);
    for (int i = 1; i <= k; i++) {
        scanf("%d %d", &a, &b);
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值