Cod sursa(job #205296)

Utilizator pauldbPaul-Dan Baltescu pauldb Data 30 august 2008 19:06:53
Problema Oz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>

#define maxn 10010
#define maxm 100010
#define stop 2000000000

int n, m;
int a[maxn];
int x[maxm], y[maxm], d[maxm];

int GCD(int a, int b)
{
	int aux; 

	while (b)
	{
		aux = a%b;
		a = b;
		b = aux;
	}

	return a;
}

int main()
{
	freopen("oz.in", "r", stdin);
	freopen("oz.out", "w", stdout);

	scanf("%d %d ", &n, &m);

	int i, aux;

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

	for (i=1; i<=m; i++)
	{
		scanf("%d %d %d ", &x[i], &y[i], &d[i]);

		aux = GCD(a[x[i]], d[i]);
		if (1LL * a[x[i]] * (d[i]/aux) > stop) 
		{
			printf("-1\n");
			return 0;
		}
		else a[x[i]] *= d[i]/aux;

		aux = GCD(a[y[i]], d[i]);
		if (1LL * a[y[i]] * (d[i]/aux) > stop)
		{
			printf("-1\n");
			return 0;
		}
		else a[y[i]] *= d[i]/aux;
	}

	for (i=1; i<=m; i++) 
	{
		aux = GCD(a[x[i]], a[y[i]]);
		if (aux != d[i])
		{
			printf("-1\n");
			return 0;
		}
	}

	for (i=1; i<=n; i++) printf("%d ", a[i]);
	printf("\n");

	return 0;
}