Cod sursa(job #2950060)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 2 decembrie 2022 18:20:22
Problema Oz Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <bits/stdc++.h>
#define LIM 2000000000LL
/// TONI BO$$ was here
/// #MLC

using namespace std;

struct{
    int i, j, x;
}q[100001];

long long v[10001];

int main()
{
    int n, m, i, a, b;
    long long c, d;
    freopen("oz.in","r",stdin);
    freopen("oz.out","w",stdout);
    scanf("%d%d", &n, &m);
    for(i = 1; i <= n; i++)
        v[i] = 1;
    bool flag = true;
    for(i = 1; i <= m; i++){
        scanf("%d%d%d", &q[i].i, &q[i].j, &q[i].x);
        a = q[i].i;
        b = q[i].j;
        c = __gcd(v[a], 1LL * q[i].x);
        d = __gcd(v[b], 1LL * q[i].x);
        if(v[a] * q[i].x / c > LIM)
            flag = false;
        else
            v[a] = v[a] * q[i].x / c;
        if(v[b] * q[i].x / d > LIM)
            flag = false;
        else
            v[b] = v[b] * q[i].x / d;
    }
    for(i = 1; i <= m; i++)
        if(__gcd(v[q[i].i], v[q[i].j]) != q[i].x)
            flag = false;
    if(!flag){
        printf("-1");
        return 0;
    }
    for(i = 1; i <= n; i++)
        printf("%lld ", v[i]);

    return 0;
}