【问题描述】
Hopper教授正在研究一种罕见的臭虫性行为。 .他假定它们有两个不同的性别,他们只会与异性XXOO。 .在他的实验,个别的臭虫和它们之间的交配行为是很容易识别,因为他们的背上印有号码。.
给出一系列臭虫的交配行为名单,判断实验结果是否支持他的“臭虫之间没有同性恋的假设”。
【解题报告】
和NOIP2010的监狱差不多,两个并查集解决问题。
1 program bugs; 2 var 3 k,nn,i,n,m,x,y,x0,y0:longint; 4 a,b,c:array[0..1000001]of longint; 5 father:array[0..40001]of longint; 6 can:boolean; 7 8 procedure init; 9 begin 10 assign(input,'bugs.in'); 11 reset(input); 12 assign(output,'bugs.out'); 13 rewrite(output); 14 end; 15 16 procedure outit; 17 begin 18 close(input); 19 close(output); 20 end; 21 22 function find(x:longint):longint; 23 begin 24 if father[x]=x then exit(x); 25 father[x]:=find(father[x]); 26 exit(father[x]); 27 end; 28 29 procedure main; 30 begin 31 readln(nn); 32 for k:=1 to nn do 33 begin 34 writeln('Scenario #',k,':'); 35 can:=false; 36 readln(n,m); 37 for i:=1 to m do readln(a[i],b[i]); 38 for i:=1 to 2*n do father[i]:=i; 39 for i:=1 to m do 40 begin 41 x:=find(a[i]); y:=find(b[i]); 42 x0:=find(a[i]+n); y0:=find(b[i]+n); 43 if (x=y)or(x0=y0) then 44 begin 45 can:=true; 46 writeln('Suspicious bugs found!'); 47 writeln; 48 break; 49 end; 50 if x<>y0 then father[x]:=y0; 51 if y<>x0 then father[y]:=x0; 52 end; 53 if can then continue; 54 writeln('No suspicious bugs found!'); 55 writeln; 56 end; 57 end; 58 59 begin 60 init; 61 main; 62 outit; 63 end.