Cod sursa(job #852688)

Utilizator stoicatheoFlirk Navok stoicatheo Data 11 ianuarie 2013 16:45:59
Problema Oz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>
 
long long sol[10100];
int x[100100], y[100100], d[100100];
 
inline long long gcd(long long X, long long Y)
{
    long long r;
     
    while (Y)
    {
        r = X % Y;
        X = Y;
        Y = r;
    }
     
    return X;
}
 
inline long long lcm(long long X, long long Y)
{
    return X * Y / gcd(X, Y);
}
 
int main()
{
    int i, N, M;
     
    freopen("oz.in", "r", stdin);
    freopen("oz.out", "w", stdout);
     
    scanf("%d%d", &N, &M);
    for (i = 1; i <= M; i ++)
        scanf("%d%d%d", &x[i], &y[i], &d[i]);
    for (i = 1; i <= N; i ++)
        sol[i] = 1;
     
    for (i = 1; i <= M; i ++)
    {
        int X = x[i], Y = y[i];
         
        sol[X] = lcm(sol[X], d[i]);
        sol[Y] = lcm(sol[Y], d[i]);
    }
     
    bool isSolution = true;
     
    for (i = 1; i <= M; i ++)
        if (gcd(sol[x[i]], sol[y[i]]) != d[i])
            isSolution = false;
     
    if (isSolution)
        for (i = 1; i <= N; i ++)
            printf("%lld ", sol[i]);
    else
        printf("-1");
     
    return 0;
}