Cod sursa(job #161180)

Utilizator astronomyAirinei Adrian astronomy Data 17 martie 2008 18:16:16
Problema Oz Scor Ascuns
Compilator cpp Status done
Runda Marime 1.01 kb
#include <stdio.h>
#include <string.h>
#include <assert.h>
using namespace std;

#define llong long long

int N, M, A[10100], X[100100], Y[100100], D[100100];

int gcd(int a, int b) { return !b ? a : gcd(b, a%b); }

int main(void)
{
    freopen("oz.in", "rt", stdin);
    freopen("oz.out", "wt", stdout);

    int i, j, k, d;

    scanf("%d %d\n", &N, &M);

    assert(N >= 1 && N <= 10000); assert(M >= 1 && M <= 100000);

    for(i = 1; i <= N; i++) A[i] = 1;
    
    for(k = 1; k <= M; k++)
    {
        scanf("%d %d %d\n", &i, &j, &d);
        assert(i >= 1 && i <= N && j >= 1 && j <= N && i != j);
        assert(d >= 1 && d <= 2000000000);
        A[i] = (int)( (llong)A[i]*d/gcd(A[i],d) );
        A[j] = (int)( (llong)A[j]*d/gcd(A[j],d) );
        X[k] = i, Y[k] = j, D[k] = d;
    }

    for(i = 1; i <= M; i++) if( gcd(A[ X[i] ], A[ Y[i] ]) != D[i] )
    {
        printf("-1\n"); return 0;
    }

    for(i = 1; i <= N; i++) printf("%d ", A[i]);

    return 0;
}