Cod sursa(job #2655348)

Utilizator YusyBossFares Yusuf YusyBoss Data 4 octombrie 2020 09:35:27
Problema Oz Scor 55
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#define NMAX 10000
#define MMAX 100000

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

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

void init(int n) {
  int i;
  for (i = 1; i <= n; i++)
    sol[i] = 1;
}

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

  fin = fopen("oz.in", "r");
  fscanf(fin, "%d%d", &n, &m);

  init(n);
  for (i = 0; i < m; i++) {
    fscanf(fin, "%d%d%d", &x[i], &y[i], &d[i]);
    sol[x[i]] = (sol[x[i]] * d[i]) / cmmdc(sol[x[i]], d[i]);
    sol[y[i]] = (sol[y[i]] * d[i]) / cmmdc(sol[y[i]], d[i]);
  }
  fclose( fin );

  i = 0;
  while (i < m && cmmdc(sol[x[i]], sol[y[i]]) == d[i])
    i++;

  fout = fopen("oz.out", "w");
  if (i == m)
    for (i = 1; i <= n; i++)
      fprintf(fout, "%d ", sol[i]);
  else
    fprintf(fout, "-1");
  return 0;
}