Cod sursa(job #2660452)

Utilizator andrei_ciobanuciobanu andrei andrei_ciobanu Data 19 octombrie 2020 15:26:11
Problema Oz Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>
#include <stdlib.h>

#define N 10000
#define M 100000

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

long long cmmmc(long long a, int b){
    return (long long)(a*b)/cmmdc(a, b);
}

int main()
{
    FILE *fin=fopen("oz.in", "r");
    FILE *fout=fopen("oz.out", "w");
    int n ,m;
    fscanf(fin, "%d%d", &n, &m);
    int i, j ,d, k, v[N],u[3][100000];

    //initializare vector
    for (k=0; k<n; k++) v[k]=1;

    //calculare elemente
    for (k=0; k<m; k++){
        fscanf(fin, "%d%d%d", &i, &j, &d);
        i--;j--;
        u[0][k]=i;
        u[1][k]=j;
        u[2][k]=d;
        v[i]=cmmmc(v[i], d);
        v[j]=cmmmc(v[j], d);
    }

    //test
    //for (k=0; k<n; k++) printf("%d\n", v[k]);

    //verificare solutie
    int found=0;
    for (k=0; k<m && !found; k++){
        if (cmmdc(v[u[0][k]], v[u[1][k]])!=u[2][k]){
            found=1;
        }
    }

    //afisare
    if (found) fprintf(fout, "-1");
    else{
        for (k=0;k<n;k++) fprintf(fout, "%d\n", v[k]);
    }
    return 0;
}