题目不难,属于并查集水题。大致题意为:
给定n个bugs,编号依次1、2、……n。它们之间只有雄性和雌性之分,并给定m对交配的情况,根据这m对交配的情况,判断是否有同性恋出现的情况。若有则输出“No suspicious bugs found!”否则输出“Suspicious bugs found!”;
题目意思很明确了。而且题型也很清晰,典型的循环路径并查集。分析如下:
这里令0表示雄性,1表示雌性(这里0和1只不过表示两种对立的状态,并没有具体的含义,可以理解为要么是雄性,要么是雌性)。给每一个bug初始化deep为0,即均为雄性或雌性(深度deep表示bug的相对性别关系)。现在解释一下deep如何表示性别的相对关系:
假设A匹配B,可令deep[A]=0,deep[B]=1。现在又有B与C匹配,那么deep[B]=1,deep[C]应该为0才对。这样的话,我们可以将具有关系的bug并在同一集合中,并用模2方式来循环表示bug之间的相对性别关系。
那么假设有匹配A B,这里就有两种情况了。
1)A与B已经有了关系,即在同一个关系集合中,分两种情况讨论:
这里deep表示bug之间的相对性别关系,
11)若A的深度deep与B的深度不同(即一个为0,一个为1),则说明不是同性恋,继续输入关系
12)若A的深度deep与B的深度相同(即均为0或均为1),则说明是相同性别,为同性恋关系,已可判定结果,后