1 solutions

  • 0
    @ 2025-11-5 16:53:06

    Pascal :

    var
      i,x,y,k,n,ans:longint;
      t:integer;
      dad:array[0..50001] of word;
      r:array[0..50001] of byte;
    function find(i:word):word;
    var
      temp:longint;
    begin
      if dad[i]=i then exit(i);
      temp:=dad[i];
      dad[i]:=find(dad[i]);
      r[i]:=(r[temp]+r[i]) mod 3;
      exit(dad[i]);
    end;
    procedure union(x,y,h:longint);
    var
      a,b:longint;
    begin
      a:=find(x);
      b:=find(y);
      dad[a]:=b;
      r[a]:=(r[y]+h-r[x]+3) mod 3;
    end;
    begin
      readln(n,k);
      for i:=1 to n do dad[i]:=i;
      for i:=1 to k do  begin
        readln(t,x,y);
       if (x>n) or (y>n) then begin inc(ans); continue; end;
        if t=1 then
         if find(x)=find(y) then
          begin
            if r[x]<>r[y] then begin inc(ans); continue; end;
          end
          else union(x,y,0);
        if t=2 then
          begin
            if x=y then
            begin
              inc(ans);
              continue;
            end;
            if find(x)=find(y) then
            begin
              if r[x]<>(r[y]+1) mod 3 then begin inc(ans); continue; end;
            end
            else union(x,y,1);
          end;
      end;
      writeln(ans);
    end.
    
    • 1

    Information

    ID
    18034
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By