Cod sursa(job #2657053)

Utilizator Antonia_onisoruantonia onisoru Antonia_onisoru Data 9 octombrie 2020 16:47:52
Problema Oz Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("oz.in");
ofstream out("oz.out");

bool flag;

int cmmmc(int a, int b)
{
    long long r, p;
    p=(long long )a*b;
    flag = 0;
    while(b)
    {
        r=(long long )a%b;
        a=b;
        b=r;
    }
    r = p / a;
    if( r > 2000000000 ){
        r = 1;
        flag = 1;
    }
    return r;
}

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

int trip[100000][3];
int v[10000];

int main()
{
    int n, m, k;
    in>>n>>m;
    for( k = 0; k < n; k++ ){
        v[k] = 1;
    }
    for( k = 0; k < m; k++ ){
        in>>trip[k][0]>>trip[k][1]>>trip[k][2];
        if( flag == 1 )
            break;
        if(v[ trip[k][0] - 1 ] % trip[k][2] != 0 ){
            v[ trip[k][0] - 1 ] = cmmmc(v[ trip[k][0] - 1 ], trip[k][2]);
        }
        if(v[ trip[k][1] - 1 ] % trip[k][2] != 0 ){
            v[ trip[k][1] - 1 ] = cmmmc(v[ trip[k][1] - 1 ], trip[k][2]);
        }
    }
    for( k = 0; k < m; k++ ){
        if( cmmdc(v[ trip[k][0] - 1 ], v[ trip[k][1] - 1 ]) != trip[k][2] )
            flag =1;
    }
    if( flag == 1 )
        out<<"-1";
    else{
        for( k = 0; k < n; k++ ){
            out<<v[k]<<" ";
        }
    }
    return 0;
}