Pagini recente » Cod sursa (job #2232944) | Cod sursa (job #2160735) | Cod sursa (job #2670606) | Cod sursa (job #2965862) | Cod sursa (job #1413771)
#include <cstdio>
#include <algorithm>
using namespace std;
int v[10010];
struct triplet
{
int x, y, d;
} a[100010];
inline int cmmdc (int a, int b)
{
while (b)
{
a %= b;
swap (a, b);
}
return a;
}
int main ()
{
freopen ("oz.in", "r", stdin);
freopen ("oz.out", "w", stdout);
int n, m;
scanf ("%d %d", &n, &m);
int ma = 0;
for (int i = 1; i <= m; ++i)
scanf ("%d %d %d", &a[i].x, &a[i].y, &a[i].d);
bool OK = true;
for (int i = 1; i <= m; ++i)
{
int xx = a[i].x;
int yy = a[i].y;
int dd = a[i].d;
int cdd = dd;
if (!v[xx]) v[xx] = dd;
if (!v[yy]) v[yy] = dd;
int c1 = cmmdc (dd, v[xx]);
int c2 = cmmdc (dd, v[yy]);
dd /= c1;
cdd /= c2;
long long z = 1LL * dd * v[xx];
if (z > 2000000000LL)
{
OK = false;
break;
}
v[xx] = z;
z = 1LL * cdd * v[yy];
if (z > 2000000000LL)
{
OK = false;
break;
}
v[yy] = z;
}
if (!OK)
{
printf ("-1\n");
return 0;
}
for (int i = 1; i <= n && OK; ++i)
if (!v[i]) OK = false;
if (!OK)
{
printf ("-1\n");
return 0;
}
for (int i = 1; i <= m && OK; ++i)
{
int p = cmmdc (v[a[i].x], v[a[i].y]);
if (p != a[i].d) OK = false;
}
if (!OK)
{
printf ("-1\n");
return 0;
}
for (int i = 1; i <= n; ++i)
printf ("%d ", v[i]);
printf ("\n");
return 0;
}