Cod sursa(job #2656116)

Utilizator LucaMihaiLM10Luca Ilie LucaMihaiLM10 Data 6 octombrie 2020 20:00:26
Problema Oz Scor 55
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <stdio.h>
#define NMAX 10000
#define MMAX 100000
#define MAX 2000000000
int x[MMAX], y[MMAX], d[MMAX], v[NMAX];
int cmmmdc( 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, j;
    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[i], &y[i], &d[i] );
        x[i]--;
        y[i]--;
        v[x[i]] = (v[x[i]] * d[i] / cmmmdc( v[x[i]], d[i] ));
        v[y[i]] = (v[y[i]] * d[i] / cmmmdc( v[y[i]], d[i] ));
    }
    fclose( fin );
    j = 0;
    while ( j < n && v[j] > 0 && v[j] <= MAX )
        j++;
    i = 0;
    if ( j == n ) {
        while ( i < m && cmmmdc( v[x[i]], v[y[i]] ) == d[i] )
            i++;
    }
    fout = fopen( "oz.out", "w" );
    if ( i == m ) {
        for ( i = 0; i < n; i++ )
            fprintf( fout, "%d ", v[i] );
    } else
        fprintf( fout, "-1" );
    fclose( fout );
    return 0;
}