2题并查集问题PASCAL求解1.体育场Description浙江省第十二届大学生运动会在浙江师范大学举行,为此在浙师大建造了一座能容纳近万人的新体育场.观众席每一行构成一个圆形,每个圆形由300个座

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/07 02:13:13

2题并查集问题PASCAL求解1.体育场Description浙江省第十二届大学生运动会在浙江师范大学举行,为此在浙师大建造了一座能容纳近万人的新体育场.观众席每一行构成一个圆形,每个圆形由300个座
2题并查集问题PASCAL求解
1.体育场
Description
浙江省第十二届大学生运动会在浙江师范大学举行,为此在浙师大建造了一座能容纳近万人的新体育场.
观众席每一行构成一个圆形,每个圆形由300个座位组成,对300个座位按照顺时针编号1到300,且可以认为有无数多行.现在比赛的组织者希望观众进入场地的顺序可以更加的有趣,在门票上并没有规定每个人的座位,而是与这个圈中某个人的相对位置,可以坐在任意一行.
门票上标示的形式如下:A B x 表示第B个人必须在A的顺时针方向x个位置(比如A坐在4号位子,x=2,则B必须坐在6号位子).
现在你就座位志愿者在入场口检票.如果拿到一张门票,与之前给定的矛盾,则被视为是假票,如果无矛盾,视为真票.现在给定该行入场观众的顺序,以及他们手中的门票,请问其中有多少假票?
Input
第一行两个数N(1

2题并查集问题PASCAL求解1.体育场Description浙江省第十二届大学生运动会在浙江师范大学举行,为此在浙师大建造了一座能容纳近万人的新体育场.观众席每一行构成一个圆形,每个圆形由300个座
Source
Problem Id:1198 User Id:qihaochen
Memory:376K Time:186MS
Language:Pascal Result:100
Source
var
n,m,a,b,x,xx,y,i,sum:longint;
c,f:array[1..50000] of longint;
function getfather(x:longint):longint;
begin
if f[x]=x then getfather:=x
else
begin
getfather:=getfather(f[x]);
c[x]:=(c[x]+c[f[x]]) mod 300;
f[x]:=getfather;
end;
end;
begin
readln(n,m);
sum:=0;
for i:=1 to n do
f[i]:=i;
for i:=1 to m do
begin
readln(a,b,xx);
x:=getfather(a);
y:=getfather(b);
if x=y then
begin
if (c[b]-c[a]+300) mod 300xx then inc(sum);
end
else
begin
f[y]:=a;
c[y]:=(xx-c[b]+300) mod 300;
end;
end;
writeln(sum);
end.
第2题时间紧迫,没来得及写