Cod sursa(job #3188715)

Utilizator RaresHRares Hanganu RaresH Data 3 ianuarie 2024 18:34:16
Problema Oz Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>

#define MAXN 10000
#define MAXM 100000

long long v[MAXN];
int triplete[MAXM][3];

long long gcd(long long a, long long b) {
  long long r;
  while(b > 0) {
    r = a % b;
    a = b;
    b = r;
  }

  return a;
}

long long lcm(long long a, long long b) {
  return a / gcd(a, b) * b;
}

int main() {
  FILE *fin, *fout;
  int n, m, i;

  fin = fopen("oz.in", "r");
  fscanf(fin, "%d%d", &n, &m);
  for(i = 0; i < n; i++)
    v[i] = 1LL;
  
  for(i = 0; i < m; i++) {
    fscanf(fin, "%d%d%d", &triplete[i][0], &triplete[i][1], &triplete[i][2]);
    v[triplete[i][0] - 1] = lcm(v[triplete[i][0] - 1], triplete[i][2]);
    v[triplete[i][1] - 1] = lcm(v[triplete[i][1] - 1], triplete[i][2]);
  }
  fclose(fin);

  i = 0;
  while(i < m && gcd(v[triplete[i][0] - 1], v[triplete[i][1] - 1]) == triplete[i][2])
    i++;
  
  fout = fopen("oz.out", "w");
  if(i < m) {
    fprintf(fout, "-1\n");
  } else {
    for(i = 0; i < n; i++) {
      fprintf(fout, "%lld ", v[i]);
    }
    fputc('\n', fout);
  }
  fclose(fout);

  return 0;
}