Cod sursa(job #2655106)

Utilizator Asgari_ArminArmin Asgari Asgari_Armin Data 3 octombrie 2020 11:46:00
Problema Oz Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#include <algorithm>

using namespace std;

const int NMAX = 10000;
const int MMAX = 100000;
const int VALMAX = 2e9;

int v[NMAX + 1];
int x[MMAX + 1], y[MMAX + 1], d[MMAX + 1];

long long cmmmc( int a, int b ){
  return (1LL * a * b) / __gcd(a, b);
}

int main() {
  FILE *fin, *fout;
  fin = fopen( "oz.in", "r" );
  fout = fopen( "oz.out", "w" );
  int n, m, i, cnt;
  fscanf( fin, "%d%d", &n, &m );
  for( i = 1; i <= n; ++i )
    v[i] = 1;
  for( i = 1; i <= m; ++i ){
    fscanf( fin, "%d%d%d", &x[i], &y[i], &d[i] );
    v[x[i]] = cmmmc(v[x[i]], d[i]);
    v[y[i]] = cmmmc(v[y[i]], d[i]);
    if( v[x[i]] > VALMAX || v[y[i]] > VALMAX )
      i = m + 2;
  }
  if( i == m + 2 )
    fprintf( fout, "-1" );
  else{
    cnt = 0;
    for( i = 1; i <= m; ++i )
      if( __gcd(v[x[i]], v[y[i]]) == d[i] )
        ++cnt;
    if( cnt < m )
      fprintf( fout, "-1" );
    else
      for( i = 1; i <= n; ++i )
        fprintf( fout, "%d ", v[i] );
  }
  fclose( fin );
  fclose( fout );
  return 0;
}