Cod sursa(job #2929378)

Utilizator BuzdiBuzdugan Rares Andrei Buzdi Data 25 octombrie 2022 18:50:50
Problema Oz Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <unordered_map>
#include <algorithm>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <cstring>
#include <bitset>

//#include <bits/stdc++.h>

#define ll long long
#define ull unsigned long long
#define MOD 10007
#define NMAX 501
#define KMAX 105
#define LIM 1000
#define INF 1e9
#define LOG 17

using namespace std;

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

struct perechi
{
    int x, y, d;
}Q[100001];

ll a[10001];
int n, m;
bool ok = true;

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

ll cmmmc(ll a, ll b)
{
    return a * b / cmmdc(a, b);
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> n >> m;

    for (int i = 1; i <= n; i++)
        a[i] = 1;

    for (int i = 1; i <= m && ok; i++)
    {
        int x, y, d;
        cin >> x >> y >> d;

        Q[i].x = x;
        Q[i].y = y;
        Q[i].d = d;

        a[x] = cmmmc(a[x], d);
        a[y] = cmmmc(a[y], d);

        if (a[x] > 2e9 || a[y] > 2e9)
            ok = false;
    }

    for (int i = 1; i <= m && ok; i++)
    {
        int val1 = Q[i].x;
        int val2 = Q[i].y;
        int d = Q[i].d;
        if (cmmdc(a[val1], a[val2]) != d)
            ok = false;
    }

    if (ok)
    {
        for (int i = 1; i <= n; i++)
            cout << a[i] << ' ';
    }
    else
        cout << -1;

    return 0;
}