并查集—解密犯罪团伙

警察利用并查集解决犯罪团伙问题。通过线索将强盗分组,运用'靠左'法则和'擒贼先擒王'原则合并同伙。最终计算独立团伙数量。并查集是一种维护不相交集合的数据结构,适用于此类问题。

警察想查清楚有几个犯罪团伙,搜集到了一些线索:

现在有10个强盗;

1号强盗与2号强盗是同伙;

3号强盗与4号强盗是同伙;

5号强盗与2号强盗是同伙;

4号强盗与6号强盗是同伙;

2号强盗与6号强盗是同伙;

8号强盗与7号强盗是同伙;

9号强盗与7号强盗是同伙;

1号强盗与6号强盗是同伙;

2号强盗与4号强盗是同伙;


强盗同伙的同伙也是同伙,请问一共有多少个独立的犯罪团伙?


基本思路:

1.一维数组f,表示10个强盗,值存储每个强盗的boss是谁。

2.初始化,开始boss都是自己,f[i]=i。

3.合并同伙,“靠左”法则,“1号强盗与2号强盗是同伙”,2号的boss变成了1号,f[2]=1。


。。。。。。

第三条线索:“5号强盗与2号强盗是同伙”,2号的boss目前是1号,“擒贼先擒王”,那么让1号的boss直接变为5号,即f[1]=5,f[2]=5。

。。。。。。


最终结果:


如果f[i]=i,就表示此人是一个犯罪团伙的最高领导人,有多少个独立的团伙,等于看最终结果中有多少个f[i]=i。


并查集:

通过一个一维数组来实现,其本质是维护一个森林。刚开始的时候,森林的每个点都是孤立的,也可以理解为每个点就是一棵只有一个节点的树,之后通过一些条件,将这些树合并成一棵大树。

合并过程中,“靠左”法则和“擒贼先擒王”原则。



输入数据:

第一行n,m,分别表示强盗人数,和线索条数,接下来m行有两个数a,b,表示a和 b是同伙。


运行结果:



并查集也称为不相交集数据结构。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值