犯罪团伙 题解

【题目描述】

警察抓到了 n 个罪犯,警察根据经验知道他们属于不同的犯罪团伙,却不能判断有多少个团伙,但通过警察的审讯,知道其中的一些罪犯之间相互认识,已知同一犯罪团伙的成员之间直接或间接认识。有可能一个犯罪团伙只有一个人。请你根据已知罪犯之间的关系,确定犯罪团伙的数量。已知罪犯的编号从 1 至 n。

【输入】

第一行:n(<=1000,罪犯数量),第二行:m(<5000,关系数量)以下若干行:每行两个数:I 和 j,中间一个空格隔开,表示罪犯 i 和罪犯 j 相互认识。

【输出】

一个整数,犯罪团伙的数量。

【样例输入】

1181 24 35 41 35 67 105 108 9

【输出】

3

【说明】

共三个犯罪团伙。

===================题解=================

并查集或者dfs均可。

先为所有罪犯创建一个数组来存储他们的父亲,初始化为他们自己的编号,之后读入关系的同时,递归查找二者的父亲,判断两关系中的两人是否有同样的父亲,若有则继续,若没有,则将二人所属集合合并。最后遍历所有犯人,递归查找每人的父亲,并累加不同种类,即为答案。

    原文作者:犯罪团伙问题
    原文地址: https://blog.csdn.net/linjia64/article/details/79960318
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞