Cod sursa(job #165108)

Utilizator DastasIonescu Vlad Dastas Data 25 martie 2008 14:01:21
Problema Oz Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>

const int maxn = 10001;
const int maxm = 100000;

FILE *in = fopen("oz.in","r"), *out = fopen("oz.out","w");

struct info
{
    int i, j, d;
};

int n, m;
int a[maxn];
info b[maxm];

int cmmdc(int a, int b)
{
    if ( !b )
        return a;

    return cmmdc(b, a % b);
}

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

void read()
{
    fscanf(in, "%d %d", &n, &m);

    for ( int i = 1; i <= n; ++i )
        a[i] = 1;

    for ( int i = 1; i <= m; ++i )
    {
        fscanf(in, "%d %d %d", &b[i].i, &b[i].j, &b[i].d);

        a[ b[i].i ] = cmmmc(a[ b[i].i ], b[i].d);
        a[ b[i].j ] = cmmmc(a[ b[i].j ], b[i].d);
    }
}

void go()
{
    for ( int i = 1; i <= m; ++i )
        if ( cmmdc( a[ b[i].i ], a[ b[i].j ] ) != b[i].d )
        {
            fprintf(out, "%d\n", -1);
            return;
        }

    for ( int i = 1; i <= n; ++i )
        fprintf(out, "%d ", a[i]);
}

int main()
{
    read();

    go();

    return 0;
}