Cod sursa(job #390298)
#include <cstdio>
int v[10005], m, n, x[100005], y[100005], D[100005];
int cmmdc(int a, int b)
{
if (b != 0)
return cmmdc(b, a%b);
else
return a;
}
bool OK()
{
for (int i = 1; i <= m; ++i)
if (cmmdc(v[x[i]], v[y[i]]) != D[i])
return false;
return true;
}
int main()
{
FILE *f = fopen("oz.in", "r"), *fout = fopen ("oz.out", "w");
fscanf(f, "%d%d", &n, &m);
for (int i = 1; i <= n; ++i)
v[i] = 1;
for (int i, j, d, c, k = 1; k <= m; ++k)
{
fscanf(f, "%d%d%d", &i, &j, &d);
x[k] = i, y[k] = j, D[k] = d;
c = cmmdc(v[i], d);
v[i] *=d/c;
//aceeasi chestie pt j
c = cmmdc(v[j], d);
v[j] *=d/c;
}
if (OK())
for (int i = 1; i <= n; ++i)
fprintf (fout, "%d ", v[i]);
else
fprintf (fout, "-1");
fprintf (fout, "\n");
fclose(f);
fclose(fout);
return 0;
}