Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Project2;
- {$APPTYPE CONSOLE}
- {$MAXSTACKSIZE 64000000}
- uses
- SysUtils;
- var
- s: int64;
- parent, size: array[-1..20000011] of longint;
- a, b, u, v, du, dv, m, k, i, w, n, z, c, dc: longint;
- function findRoot(x: longint): longint;
- begin
- if parent[x] = x then result:= x else result:= findRoot(parent[x]);
- end;
- procedure makeSet(x: longint);
- begin
- parent[x]:= x;
- size[x]:= 1;
- end;
- procedure unionSets(a, b: longint);
- begin
- if a <> b then begin
- if size[a] >= size[b] then begin
- parent[b]:= a;
- size[a]:= size[a]+size[b];
- end else begin
- parent[a]:= b;
- size[b]:= size[b]+size[a];
- end;
- end;
- end;
- begin
- reset(input,'dsu.in');
- rewrite(output,'dsu.out');
- readln(n, k);
- for i:= 1 to n do begin
- makeSet(i);
- end;
- for z:= 1 to k do begin
- readln(u, v, c, du, dv, dc, m);
- for i:= 0 to m-1 do begin
- a:= (n + int64(u+int64(du*i))mod n) mod n;
- b:= (n + int64(v+int64(dv*i))mod n) mod n;
- w:= (1000000000 + (c+int64(dc*i))mod 1000000000) mod 1000000000;
- a:= findROot(a);
- b:= findRoot(b);
- if a <> b then begin
- s:= s + w;
- unionSets(a, b);
- end;
- end;
- end;
- writeln(s);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement