Cod sursa(job #2655158)

Utilizator AlexNicuNicu Alexandru AlexNicu Data 3 octombrie 2020 13:52:56
Problema Oz Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <stdio.h>
#include <stdlib.h>
int i[100001], j[100001], d[100001], v[10001];
long long cmmmc ( int a, int b ) {
  int ca, r, cb;
  ca = a;
  cb = b;
  while ( cb > 0 ) {
    r = ca % cb;
    ca = cb;
    cb = r;
  }
  return (long long)a * b / ca;
}
int cmmdc ( int a, int b ) {
  int r;
  while ( b > 0 ) {
    r = a % b;
    a = b;
    b = r;
  }
  return a;
}
int main()
{
    FILE *fin, *fout;
    fin = fopen( "oz.in", "r" );
    fout = fopen( "oz.out", "w" );
    int n, m, i1;
    long long a;
    fscanf ( fin, "%d %d", &n, &m );
    for ( i1 = 1; i1 <= n; i1++ ) {
     v[i1] = 1;
    }
    for ( i1 = 1; i1 <= m; i1++ ) {
     fscanf ( fin, "%d %d %d", &i[i1], &j[i1], &d[i1] );
     a = cmmmc( v[i[i1]], d[i1] );
     if ( a > 2000000000 ) {
       fprintf( fout, "-1" );
       return 0;
     }
     v[i[i1]] = a;
     a = cmmmc( v[j[i1]], d[i1] );
     if ( a > 2000000000 ) {
       fprintf( fout, "-1" );
       return 0;
     }
     v[j[i1]] = a;
    }
    for ( i1 = 1; i1 <= m; i1++ ) {
      if ( cmmdc(v[i[i1]], v[j[i1]]) != d[i1] ) {
        fprintf( fout, "-1" );
        return 0;
      }
    }
    for ( i1 = 1; i1 <= n; i1++ )
      fprintf( fout, "%d ", v[i1] );
    fclose(fin);
    fclose(fout);
    return 0;
}