Cod sursa(job #1005792)

Utilizator poptibiPop Tiberiu poptibi Data 5 octombrie 2013 20:16:04
Problema Oz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;

const int NMAX = 10010, MMAX = 100010, MAX = 2000000000;

int N, M, X[MMAX], Y[MMAX], D[MMAX];
long long V[NMAX];

long long GCD(long long A, long long B)
{
    if(!B) return A;
    return GCD(B, A % B);
}

long long LCM(long long A, long long B)
{
    return (A * B) / GCD(A, B);
}

int main()
{
    freopen("oz.in", "r", stdin);
    freopen("oz.out", "w", stdout);

    scanf("%i %i", &N, &M);
    for(int i = 1; i <= N; ++ i) V[i] = 1;

    for(int i = 1; i <= M; ++ i)
    {
        scanf("%i %i %i", &X[i], &Y[i], &D[i]);
        V[X[i]] = LCM(V[X[i]], 1LL * D[i]);
        V[Y[i]] = LCM(V[Y[i]], 1LL * D[i]);
        if(V[X[i]] > 1LL * MAX || V[Y[i]] > 1LL * MAX)
        {
            printf("-1\n");
            return 0;
        }
    }

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

    for(int i = 1; i <= N; ++ i)
        printf("%lld ", V[i]);

    return 0;
}