算法模板——并查集 1
实现功能——操作1:将两个数字合并到一个集合内;操作2:判断两个数字是否在一起
第6行是亮点,这个优化能快出不少,真的
1 var 2 i,j,k,l,m,n:longint; 3 c:array[0..100000] of longint; 4 function getfat(x:longint):longint;inline; 5 begin 6 if c[x]<>x then c[x]:=getfat(c[x]); //亮点在这里么么哒 7 exit(c[x]); 8 end; 9 begin 10 readln(n); 11 for i:=1 to n do c[i]:=i; 12 while true do 13 begin 14 read(i);if (i<1) or (i>2) then halt; 15 readln(j,k); 16 case i of 17 1:c[getfat(j)]:=getfat(k); //合并 18 2:if getfat(j)=getfat(k) then writeln('Together!') else writeln('Not together!'); //判断是否已合并 19 end; 20 end; 21 end. 22