Cod sursa(job #2486385)

Utilizator WladDalwMvladutu cristian vlad WladDalwM Data 2 noiembrie 2019 19:51:59
Problema Oz Scor 55
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream>

using namespace std;
ifstream cin("oz.in");
ofstream cout("oz.out");

long long maxim = 2000000000;


struct reg
{
    int nr1 , nr2;
    int cmmdc;
}r[100005];

bool lim(long long a , long long MAX)
{
    if(a <= MAX)
        return true;
        return false;
}

int Cmmdc(int a , int b)
{
    int r;
    while(b)
    {
        r = a % b;
        a = b;
        b = r;
    }
    return a;
}


int Cmmmc(int a , int b)
{
    return a * b / Cmmdc(a , b);
}


void Pre(long long v[] , int a)
{
    int MAX = v[0] , i;
    for(i = 1; i <= MAX; i++)
        v[i] = a;
}


long long v[10005];

int main()
{
    bool ok = true;

    int n , m , t , i;

    cin >> n >> m;
    v[0] = n;
    Pre(v , 1);

    for(t = 1; t <= m; t++)
        cin >> r[t].nr1 >> r[t].nr2 >> r[t].cmmdc;

    for(t = 1; t <= m; t++)
    {
        v[r[t].nr1] = Cmmmc(v[r[t].nr1] , r[t].cmmdc);
        v[r[t].nr2] = Cmmmc(v[r[t].nr2] , r[t].cmmdc);
    }
    for(t = 1; t <= m; t++)
    {
        if( Cmmdc(v[r[t].nr1] , v[r[t].nr2]) != r[t].cmmdc )
            {ok = false; break;}
        if( ! (lim(v[r[t].nr1] , maxim) && lim(v[r[t].nr2] , maxim)) )
            {ok = false; break;}
    }
    if(ok == false)
        cout << "-1";
    else
    if(ok == true)
    {
        for(i = 1; i <= n; i++)
            cout << v[i] << " ";
    }



    return 0;
}