Cod sursa(job #169396)

Utilizator DiaconuDiaconu Loredana Diaconu Data 1 aprilie 2008 17:46:24
Problema Oz Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.19 kb
var       f,g:text;
          a,b,d:array[1..100000] of longint;
          v:array[1..20000] of int64;
          i,m,n:longint;
          x,y,r,diz:int64;
          ok:boolean;
begin
assign (f,'oz.in');reset (f);
assign (g,'oz.out');rewrite (g);
readln (f,n,m);
for i:=1 to n do
 v[i]:=1;
for i:=1 to m do begin
 readln (f,a[i],b[i],d[i]);
 if d[i]>v[a[i]] then begin
  x:=d[i];
  y:=v[a[i]];
 end
 else begin
  x:=v[a[i]];
  y:=d[i];
 end;
 r:=x mod y;
 while r<>0 do begin
  x:=y;
  y:=r;
  r:=x mod y;
 end;
 diz:=d[i] div y;
 v[a[i]]:=v[a[i]]*diz;
 if d[i]>v[b[i]] then begin
  x:=d[i];
  y:=v[b[i]];
 end
 else begin
  x:=v[b[i]];
  y:=d[i];
 end;
 r:=x mod y;
 while r<>0 do begin
  x:=y;
  y:=r;
  r:=x mod y;
 end;
 diz:=d[i] div y;
 v[b[i]]:=v[b[i]]*diz;
end;
ok:=true;
for i:=1 to m do begin
 if v[a[i]]>v[b[i]] then begin
  x:=v[a[i]];
  y:=v[b[i]];
 end
 else begin
  x:=v[b[i]];
  y:=v[a[i]];
 end;
 r:=x mod y;
 while r<>0 do begin
  x:=y;
  y:=r;
  r:=x mod y;
 end;
 if y<>d[i] then ok:=false;
end;
if not ok then writeln (g,-1,' ')
else begin
 for i:=1 to n do
  write (g,v[i],' ');
end;
close(f);close(g);
end.