Cod sursa(job #2943132)

Utilizator StefanStratonStefan StefanStraton Data 20 noiembrie 2022 16:51:36
Problema Oz Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <iostream>
#include <math.h>
using namespace std;
ifstream in ("oz.in"); ofstream out ("oz.out");
int N, M; /// un vector cu N numere; M triplete
int cmmdc(int a, int b){
    if( a == 0 ) return b;
    return cmmdc(b%a,a);
}
int cmmmc(int a, int b){
    return ((a/cmmdc(a,b))*b);
}
int main(){
    int v[10001] = {1};
    in >> N >> M;
    bool solutie = true;
    struct ijd{
        int i, j, d;
    }triplet[M+1];
    for(int z = 1 ; z <= 10000; z++) v[z] = 1;
    for(int x = 1 ; x <= M; x++){
        /**< Se memoreaza tripletele pentru a se putea verifica vectorul final */
        in >> triplet[x].i >> triplet[x].j >> triplet[x].d;
        v[triplet[x].i] = cmmmc(v[triplet[x].i],triplet[x].d);
        v[triplet[x].j] = cmmmc(v[triplet[x].j],triplet[x].d);
    }
    /**< Verificare */
    /// se parcurg din nou tripletele
    /// daca un triplet i j d nu se verifica solutie = false
    for(int x = 1 ; x <= M; x++){
        int aux = cmmdc(v[triplet[x].i],(v[triplet[x].j]));
        if(aux != triplet[x].d) solutie = false;
        /// verificare cmmdc de vi si vj = d alfel solutie = false
    }
    if(solutie == true) for(int x = 1 ; x <= N; x++) out << v[x] << " ";
    else out << "-1";
    in.close(); out.close();
    return 0;
}