Cod sursa(job #2105842)

Utilizator DruffbaumPopescu Vlad Druffbaum Data 14 ianuarie 2018 13:46:21
Problema Oz Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>

const int MAXN = 1e4;
const int MAXM = 1e5;

struct Oper {
  int x, y, d;
};

int v[MAXN + 1];
Oper o[MAXM];

inline int gcd(int a, int b) {
  return b ? gcd(b, a % b) : a;
}

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

int main() {
  int n, m, i;
  bool flag;
  FILE *f = fopen("oz.in", "r");
  fscanf(f, "%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) {
    v[i] = 1;
  }
  for (int i = 0; i < m; ++i) {
    fscanf(f, "%d%d%d", &o[i].x, &o[i].y, &o[i].d);
    v[o[i].x] = lcm(v[o[i].x], o[i].d);
    v[o[i].y] = lcm(v[o[i].y], o[i].d);
  }
  fclose(f);
  flag = i = 0;
  while (i < m && !flag) {
    if (gcd(v[o[i].x], v[o[i].y]) != o[i].d) {
      flag = 1;
    }
    ++i;
  }
  f = fopen("oz.out", "w");
  if (flag) {
    fprintf(f, "-1\n");
  } else {
    for (int i = 1; i <= n; ++i) {
      fprintf(f, "%d ", v[i]);
    }
  }
  fclose(f);
  return 0;
}