Cod sursa(job #1474998)

Utilizator hrazvanHarsan Razvan hrazvan Data 23 august 2015 13:03:38
Problema Oz Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>
#define MAXN 10000
#define MAXM 100000
#define INF 2000000000
int v[MAXN];

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

int main(){
  FILE *in = fopen("oz.in", "r");
  int n, m, i, x, y, z, c;
  long long p;
  char g = 0;
  fscanf(in, "%d%d", &n, &m);
  for(i = 0; i < n; i++)
    v[i] = 1;
  for(i = 0; i < m; i++){
    fscanf(in, "%d%d%d", &x, &y, &z);
    x--;  y--;
    c = cmmdc(z, v[x]);
    p = 1LL * v[x] * z / c;
    if(p <= INF)
      v[x] = p;
    else
      g = 1;
    c = cmmdc(z, v[y]);
    p = 1LL * v[y] * z / c;
    if(p <= INF)
      v[y] = p;
    else
      g = 1;
  }
  fclose(in);
  in = fopen("oz.in", "r");
  fscanf(in, "%d%d", &n, &m);
  for(i = 0; i < m; i++){
    fscanf(in, "%d%d%d", &x, &y, &z);
    x--;  y--;
    if(cmmdc(v[x], v[y]) != z)
      g = 1;
  }
  fclose(in);
  FILE *out = fopen("oz.out", "w");
  if(g)
    fprintf(out, "-1");
  else{
    for(i = 0; i < n; i++)
      fprintf(out, "%d ", v[i]);
  }
  fclose(out);
  return 0;
}