Cod sursa(job #165145)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 25 martie 2008 15:36:37
Problema Oz Scor 35
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.56 kb
program oz;
var f,g:text;
    v:array[1..10000]of longint;
    p1,p2,p3:array[1..100000]of longint;
    n,m,a,b,k,i,ok,c1,c2,c3:longint;
    ko,x,cx,cv,h:int64;
begin
assign(f,'oz.in');
assign(g,'oz.out');
reset(f);
rewrite(g);
read(f,n,m);
for i:=1 to m do
  begin
    read(f,p1[i],p2[i],p3[i]);
    a:=p1[i];
    b:=p2[i];
    x:=p3[i];
    cx:=x;
    if (v[a]=0)then v[a]:=x else
    begin
      cv:=v[a];
      k:=v[a] mod x;
      while (k<>0)do
        begin
          v[a]:=x;
          x:=k;
          k:=v[a] mod x;
        end;
      ko:=cv*cx;
      h:=ko div x;
      if (h>2000000000)then
        begin
          ok:=1;
          break;
        end;
      v[a]:=h;
    end;
    x:=cx;
    if (v[b]=0)then v[b]:=x else
    begin
      cv:=v[b];
      k:=v[b] mod x;
      while (k<>0)do
        begin
          v[b]:=x;
          x:=k;
          k:=v[b] mod x;
        end;
      ko:=cv*cx;
      h:=ko div x;
      if (h>2000000000)then
        begin
          ok:=1;
          break;
        end;
      v[b]:=h;
    end;
  end;
if (ok=1)then write(g,'-1')else
  begin
    for i:=1 to m do
      begin
        c1:=v[p1[i]];
        c2:=v[p2[i]];
        k:=c1 mod c2;
        while (k<>0)do
          begin
            c1:=c2;
            c2:=k;
            k:=c1 mod c2;
          end;
        if (c2<>p3[i])then
          begin
            ok:=1;
            break;
          end;
      end;
    if (ok=1)then write(G,'-1')else
      for i:=1 to n do write(g,v[i],' ');
  end;
close(f);
close(g);
end.