社区讨论
p党求助,为什么只有40分?
P2024[NOI2001] 食物链参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mi6y6h00
- 此快照首次捕获于
- 2025/11/20 12:44 4 个月前
- 此快照最后确认于
- 2025/11/20 12:44 4 个月前
PASCAL
var
last,next:array[1..3] of longint;
flag:array[0..50005] of boolean;
z,yy,ans,n,k,i,x,zz,y:longint;
f:array[0..50005] of longint;
function max(a,b:longint):boolean;
begin
if (a=1) and (b=2) then exit(true);
if (a=2) and (b=3) then exit(true);
if (a=3) and (b=1) then exit(true);
exit(false);
end;
begin
read(n,k);
for i:=1 to 2 do next[i]:=i+1;next[3]:=1;
for i:=2 to 3 do last[i]:=i-1;last[1]:=3;
for i:=1 to k do
begin
read(x,y,z);
if (y>n) or (y<1) or (z>n) or (z<1) then inc(ans) else
begin
if x=1 then
begin
if (flag[y] and flag[z]) and (f[y]<>f[z]) then inc(ans);
if flag[y] and not flag[z] then
begin
f[z]:=f[y];flag[z]:=true;
end;
if flag[z] and not flag[y] then
begin
f[y]:=f[z];flag[y]:=true;
end;
if (not flag[y]) and (not flag[z]) then
begin
f[y]:=1;f[z]:=1;flag[y]:=true;flag[z]:=true;
end;
end;
if x=2 then
begin
if (flag[y] and flag[z]) and (next[f[y]]<>f[z]) then inc(ans);
if flag[y] and not flag[z] then
begin
f[z]:=next[f[y]];flag[z]:=true;
end;
if flag[z] and not flag[y] then
begin
f[y]:=last[f[z]];flag[y]:=true;
end;
if (not flag[z]) and (not flag[y]) then
begin
f[y]:=1;f[z]:=2;flag[y]:=true;flag[z]:=true;
end;
end;
end;
end;
writeln(ans);
end.
回复
共 1 条回复,欢迎继续交流。
正在加载回复...