Cod sursa(job #3189118)

Utilizator horia.boeriuBoeriu Horia Andrei horia.boeriu Data 4 ianuarie 2024 15:22:00
Problema Oz Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 10000
#define MAXM 100000
#define INFINIT 2000000000
long long v[MAXN];
int mr[3][MAXM];
long long cmmmc(int i, int b) {
    long long a;
    int r, x;
    x = b;
    a = v[i];
    while (b > 0) {
        r = a % b;
        a = b;
        b = r;
    }
    return v[i] * x / a;
}
int cmmdc(int a, int b) {
    int r;
    while (b > 0) {
        r = a % b;
        a = b;
        b = r;
    }
    return a;
}
int main()
{
    FILE *fin, *fout;
    int n, m, i, d, x, y;
    fin = fopen("oz.in", "r");
    fscanf(fin, "%d%d", &n, &m);
    for (i = 0; i < n; i++) {
        v[i] = 1;
    }
    for (i = 0; i < m; i++) {
        fscanf(fin, "%d%d%d", &x, &y, &d);
        x--;
        y--;
        mr[0][i] = x;
        mr[1][i] = y;
        mr[2][i] = d;
        if (v[x] <= INFINIT) {
            v[x] = cmmmc(x, d);
        }
        if (v[y] <= INFINIT) {
            v[y] = cmmmc(y, d);
        }
    }
    fclose(fin);
    i = 0;
    while (i < m && cmmdc(v[mr[0][i]], v[mr[1][i]]) == mr[2][i]) {
        i++;
    }
    fout = fopen("oz.out", "w");
    if (i < m) {
        fprintf(fout, "-1\n");
    } else {
        for (i = 0; i < n; i++) {
            fprintf(fout, "%lld ", v[i]);
        }
    }
    fclose(fout);
    return 0;
}