Cod sursa(job #2669010)

Utilizator teodorescunicolasteodorescu nicolas alexandru teodorescunicolas Data 5 noiembrie 2020 21:19:47
Problema Oz Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#define MMAX 100000
#define NMAX 10000

struct triplete{
    int poz1, poz2, div;
}v[MMAX];
int numere[NMAX];

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, ok;
    fin = fopen( "oz.in", "r" );
    fout = fopen( "oz.out", "w" );
    fscanf( fin, "%d%d", &n, &m );
    for ( i = 0; i < n; i++ ) {
        numere[i] = 1;
    }
    for ( i = 0; i < m; i++ ) {
        fscanf( fin, "%d%d%d", &v[i].poz1, &v[i].poz2, &v[i].div );
        numere[v[i].poz1 - 1] *= v[i].div / cmmdc( numere[v[i].poz1 - 1], v[i].div );
        numere[v[i].poz2 - 1] *= v[i].div / cmmdc( numere[v[i].poz2 - 1], v[i].div );
    }
    ok = 0;
    for ( i = 0; i < m; i++ ) {
        if ( cmmdc( numere[v[i].poz1 - 1], numere[v[i].poz2 - 1] ) != v[i].div ) {
            ok = 1;
        }
    }
    if ( ok == 0 ) {
        for ( i = 0; i < n; i++ ) {
            fprintf( fout, "%d ", numere[i] );
        }
    } else {
        fprintf( fout, "-1" );
    }
    fclose( fin );
    fclose( fout );
    return 0;
}