Cod sursa(job #2655896)

Utilizator mihaipriboimihailucapriboi mihaipriboi Data 5 octombrie 2020 22:29:01
Problema Oz Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
//Mihai Priboi

#include <stdio.h>
#include <stdlib.h>

int v[10000 + 1], query[3][100000];

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;
  int n, m, i, incorect;
  long long cmmmc1, cmmmc2;
  fin = fopen( "oz.in", "r" );
  fscanf( fin, "%d%d", &n, &m );
  // pregatire vector
  for( i = 1; i <= n; i++ )
    v[i] = 1;
  //
  incorect = 0;
  for( i = 0; i < m; i++ ) {
    fscanf( fin, "%d%d%d", &query[0][i], &query[1][i], &query[2][i] );
    cmmmc1 = cmmdc(v[query[0][i]], query[2][i]);
    cmmmc1 = (long long)v[query[0][i]] * query[2][i] / cmmmc1;
    cmmmc2 = cmmdc(v[query[1][i]], query[2][i]);
    cmmmc2 = (long long)v[query[1][i]] * query[2][i] / cmmmc2;
    if( cmmmc1 > 2000000000 || cmmmc2 > 2000000000 ) {
      incorect = 1;
      cmmmc1 = cmmmc2 = 1;
    }
    v[query[0][i]] = cmmmc1;
    v[query[1][i]] = cmmmc2;
  }
  fclose( fin );
  // verificare daca e corect
  for( i = 0; i < m; i++ )
    if( cmmdc(v[query[0][i]], v[query[1][i]]) != query[2][i] )
      incorect = 1;
  fout = fopen( "oz.out", "w" );
  if( incorect == 1 )
    fprintf( fout, "-1" );
  else
    for( i = 1; i <= n; i++ )
      fprintf( fout, "%d ", v[i] );
  fclose( fout );
  return 0;
}