Cod sursa(job #165974)

Utilizator valytgjiu91stancu vlad valytgjiu91 Data 27 martie 2008 11:02:13
Problema Oz Scor 5
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.61 kb
var f,g:text;
v:array[1..10000]of longint;
a:array[1..10000]of record
                       i,j,d:integer;
                       end;
i1,n:integer;
d1,d2,l,i,j,d,m:longint;
q:boolean;
x:int64;
function prim(c:longint):boolean;
var q:boolean;
begin
 q:=true;
 for i:=2 to trunc(sqrt(c)) do
     if c mod i=0 then begin
                        q:=false;
                        break;
                        end;
 prim:=q;
end;

function cmmdc(x,y:longint):longint;
var r:longint;
begin
r:=x mod y;
while r<>0 do begin
              x:=y;
              y:=r;
              r:=x mod y;
              end;
if y=1 then cmmdc:=1
       else cmmdc:=y;
end;

begin
assign(f,'oz.in');
reset(f);
readln(f,n,m);
assign(g,'oz.out');
rewrite(g);
for i:=1 to n do
  v[i]:=1;
for l:=1 to m do
  begin
    readln(f,i,j,d);
    a[l].i:=i;
    a[l].j:=j;
    a[l].d:=d;
    d1:=d;
    d2:=d;
    for i1:=2 to (d div 2)  do
       if (d mod i1=0) and prim(i1) then begin
                       if v[i]mod i1 =0 then
                                while v[i]mod i1=0 do
                                  begin
                                      d1:=d1 div i1;
                                      v[i]:=v[i]div i1;
                                   end;
                       if v[j]mod i1 =0 then
                                           while v[i]mod i1=0 do
                                          begin
                                             d2:=d2 div i1;
                                             v[j]:=v[j]div i1;
                                             end;
                       end;
    if d1=d then if v[i] mod d=0 then v[i]:=v[i]div d;
    if d2=d then if v[j] mod d=0 then v[j]:=v[j]div d;
    x:=v[i]*d;
    if x>2000000000   then
                      begin
                                              writeln(g,'-1');
                                              close(g);
                                              halt;
                                              end
              else
              v[i]:=x;
    x:=v[j]*d;
    if x>2000000000   then
                      begin
                                              writeln(g,'-1');
                                              close(g);
                                              halt;
                                              end
              else
              v[j]:=x;
  end;

q:=true;
for i:=1 to m do
if cmmdc(v[a[i].i],v[a[i].j])<>a[i].d then begin q:=false; break;end;
if q then
begin
for i:=1 to n do
 write(g,v[i],' ');
end
else writeln(g,'-1');
close(g);
end.