Cod sursa(job #2105848)

Utilizator DruffbaumPopescu Vlad Druffbaum Data 14 ianuarie 2018 13:51:11
Problema Oz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>

typedef long long i64;
const int MAXN = 1e4;
const int MAXM = 1e5;

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

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

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

inline i64 lcm(int a, int b) {
  return 1LL * 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, "%lld ", v[i]);
    }
  }
  fclose(f);
  return 0;
}