TYVJ1111(舞会)

算法:并查集。
汗,光棍题…… 鄙视

题目有问题的说,只要A愿意与B交流,那么不管B愿不愿意与A交流都将它们分成一组……

program P1111;

var
	fa:array [0..200] of longint;
	n,ans:longint;
		
function get(x:longint):longint;
begin
	if fa[x]=x then exit(x)
	else
		begin
			fa[x]:=get(fa[x]);
			exit(fa[x]);
		end;
end;
		
procedure union(x,y:longint);		
begin
	if get(x)<>get(y) then
		begin
			dec(ans);//如果不是一个祖先的人们合并在一起,那么就减少了一个人的组,就减掉一个ans。
			fa[get(x)]:=get(y);
		end;
end;									
				
procedure init;
var
	i,t:longint;
begin
	readln(n);
	ans:=n;//初始ans为n,表示最少需要将人分成n组,每组一人。
	for i:=1 to n do fa[i]:=i;
	for i:=1 to n do 
		begin
			read(t);
			while t<>0 do 
				begin
					union(i,t);
					read(t);
				end;
			readln;
		end;
end;				

begin
	assign(input,'P1111.in'); reset(input);
	assign(output,'P1111.out'); rewrite(output);

	init;
	writeln(ans);

	close(input); close(output);
end.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值