Cod sursa(job #164712)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 24 martie 2008 18:38:51
Problema Oz Scor 90
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.37 kb
type pelem=^elem;
     elem=record
       ii,ij,divi:longint;
       next:pelem;
     end;

var fi,fo:text;
    n,m,i,j,d:int64;
    k:longint;
    v:array[1..10000]of int64;
    p,l:pelem;
function ggt(a,b:int64):int64;
begin
  if b=0 then ggt:=a
         else ggt:=ggt(b,a mod b);
end;
procedure verif(l:pelem);
begin
  if ggt(v[l^.ii],v[l^.ij])<>l^.divi then
    begin
      writeln(fo,-1); close(fo); halt;
    end;
end;
begin
  assign(fi,'oz.in'); reset(fi);
  assign(fo,'oz.out'); rewrite(fo);
  read(fi,n,m); v[1]:=0;
  for k:=1 to m do
    begin
      read(fi,i,j,d);
      new(p);
      p^.ii:=i;
      p^.ij:=j;
      p^.divi:=d;
      p^.next:=l;
      l:=p;
      if v[i]=0 then v[i]:=d
       else
        begin
          v[i]:=v[i]*d div ggt(d,v[i]);
          if v[i]>2000000000 then
           begin
             writeln(fo,-1);
             close(fo);
             halt;
           end;
        end;
      if v[j]=0 then v[j]:=d
       else
        begin
          v[j]:=v[j]*d div ggt(d,v[j]);
          if v[j]>2000000000 then
           begin
             writeln(fo,-1); close(fo); halt;
           end;
        end;
    end;
  while l<>nil do
    begin
      verif(l);
      l:=l^.next;
    end;
  for k:=1 to n do
   if v[k]=0 then write(fo,1,' ')
             else write(fo,v[k],' ');
  close(fi); close(fo);
end.