Cod sursa(job #3358116)

Utilizator Darkillgo22Marcus Darkillgo22 Data 14 iunie 2026 19:03:24
Problema Oz Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>

using namespace std;

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

int n, m, v[10001], u[10001], i, j, d, d2, a, b, ma, r;
int main() {
	fin >> n >> m;
	
	if(n == 1) {
	    fout << -1;
	    return 0;
	}
	
    for (i = 1; i <= n; ++i)
        v[i] = 1;
        
        
    ma = 2000000000;
    for (int k = 1; k <= m; ++k) {
        fin >> i >> j >> d;
        ++u[i], ++u[j];
        d2 = d, a = v[i], b = v[j];
        //cmmdc i si d, cmmdc j si d cu Euclid si dupa inmultim v[i/j]*cmmdc
        while (d != 0) r = a % d, a = d, d = r;
        //ne trebuie d ul 
        d = d2;
        while (d2 != 0) r = b % d2, b = d2, d2 = r;
    	
        v[i] = v[i] / a, v[j] = v[j] / b;
    	if (v[i] <= ma / d && v[j] <= ma / d) {
    	    v[i] = v[i] * d;
    	    v[j] = v[j] * d;
    	}
    	else {
    		fout << -1;
    		return 0;
        }
    	//inmultim doar cu d / cmmdc dintre cele 2, asa scapam de a inmulti cu prea mult ca se duc factorii comuni si se inmulteste doar cu cei necomuni.
    }
    //afisam vectorul la final daca se afla o solutie
    for(i = 1; i <= n; ++i)
        if(u[i] == 0) {
            fout << -1;
            return 0;
        }
    
    for (i = 1; i <= n; ++i)
        fout << v[i] << " ";
    
    return 0;
}