Cod sursa(job #1833230)

Utilizator TincaMateiTinca Matei TincaMatei Data 21 decembrie 2016 22:17:05
Problema Oz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>

const int MAX_N = 10000;
const int MAX_M = 100000;
int v[MAX_N];
int p1[MAX_M], p2[MAX_M], d[MAX_M];

inline int cmmdc(int a, int b) {
  int r;
  while(b != 0) {
    r = a % b;
    a = b;
    b = r;
  }
  return a;
}

typedef long long i64;

inline int cmmmc(int a, int b) {
  return (i64)a * b / cmmdc(a, b);
}

int main() {
  int n, m;
  FILE *fin = fopen("oz.in", "r");
  fscanf(fin, "%d%d", &n, &m);
  for(int i = 0; i < n; ++i)
    v[i] = 1;
  for(int i = 0; i < m; ++i) {
    fscanf(fin, "%d%d%d", &p1[i], &p2[i], &d[i]);
    --p1[i];
    --p2[i];
    v[p1[i]] = cmmmc(v[p1[i]], d[i]);
    v[p2[i]] = cmmmc(v[p2[i]], d[i]);
  }
  fclose(fin);

  bool ok = true;
  for(int i = 0; i < m; ++i)
    if(cmmdc(v[p1[i]], v[p2[i]]) != d[i])
      ok = false;

  FILE *fout = fopen("oz.out", "w");
  if(ok)
    for(int i = 0; i < n; ++i)
      fprintf(fout, "%d ", v[i]);
  else
    fprintf(fout, "-1");
  fclose(fout);
  return 0;
}