hdu 1829 A Bug's Life(带权并查集)

网友投稿 699 2022-08-27

hdu 1829 A Bug's Life(带权并查集)

hdu 1829 A Bug's Life(带权并查集)

题目:​​http://acm.hust.edu-/vjudge/contest/view.action?cid=86955#problem/B​​

Description

Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they feature two different genders and that they only interact with bugs of the opposite gender. In his experiment, individual bugs and their interactions were easy to identify, because numbers were printed on their backs.  Problem Given a list of bug interactions, decide whether the experiment supports his assumption of two genders with no homosexual bugs or if it contains some bug interactions that falsify it.

Input

The first line of the input contains the number of scenarios. Each scenario starts with one line giving the number of bugs (at least one, and up to 2000) and the number of interactions (up to 1000000) separated by a single space. In the following lines, each interaction is given in the form of two distinct bug numbers separated by a single space. Bugs are numbered consecutively starting from one.

Output

The output for every scenario is a line containing "Scenario #i:", where i is the number of the scenario starting at 1, followed by one line saying either "No suspicious bugs found!" if the experiment is consistent with his assumption about the bugs' sexual behavior, or "Suspicious bugs found!" if Professor Hopper's assumption is definitely wrong.

Sample Input

2 3 3 1 2 2 3 1 3 4 2 1 2 3 4

Sample Output

Scenario #1: Suspicious bugs found! Scenario #2: No suspicious bugs found!

Hint

Huge input,scanf is recommended.

告诉昆虫的个数和交配数,问是否有同性恋的存在。比如:

3 3

1 2

2 3

1 3

1喜欢2,2喜欢3,1喜欢3,那么1和3就是同性恋。

运用带权并查集解决此问题。带权并查集将有关系的个体归于一类(喜欢,被喜欢,间接喜欢,间接被喜欢都属于此类),然后再进行细分,通常用关系向量表示他们的联系(往往另设一个数组)。

#include #include #include using namespace std;const int N=2000+5;int father[N],prank[N];bool flag;int find(int a){ if(father[a]==0){ return a; } int temp=father[a]; father[a]=find(father[a]); //压缩路径 prank[a]=(prank[a]+prank[temp])%2; //维护关系 return father[a];}void init(int sc){ memset(prank,0,sizeof(prank)); memset(father,0,sizeof(father));}int main(){ //freopen("cin.txt","r",stdin); int t; cin>>t; for(int k=1;k<=t;k++){ int num,opera; flag=1; scanf("%d%d",&num,&opera); init(num); for(int i=0;i

下图中的rank就是代码中的prank(因为关键字的关系后来改的)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:有关GO和Erlang的一些思考(golang知识点总结)
下一篇:poj 1699 Best Sequence(dfs+A(n,n))
相关文章

 发表评论

暂时没有评论,来抢沙发吧~