Cod sursa(job #219464)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 6 noiembrie 2008 22:47:25
Problema Oz Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>
#include <math.h>
#include <cstdlib>

long long i, m, n, p1[20010], p2[20010], vq[200010], dv[20010];

long long gcd(long long a, long long b) {
	long long r = 0;	
	r = a % b;
	while (r != 0) {
		a = b;  
		b = r;  
		r = a % b; 
	}
	if (b == 0) {
		return 1;
	}
	return b;
}

void check() {
	for (long i = 1; i <= m; ++i) {
		if (gcd(vq[p1[i]], vq[p2[i]]) != dv[i])  {
			printf("-1");
			exit(0);
		}
	}
}

int main() {
	freopen("oz.in", "r", stdin);
	freopen("oz.out", "w", stdout);
	scanf("%lld %lld", &n, &m);
	for (i = 1; i <= n; ++i) vq[i] = 1;
	for (i = 1; i <= m; ++i) {
		scanf("%lld %lld %lld", &p1[i], &p2[i], &dv[i]);
		if (vq[p1[i]] <= 0 || vq[p2[i]] <= 0) {
			printf("-1");
			exit(0);
		}
		vq[p1[i]] = ((long long)vq[p1[i]] * dv[i]) / gcd(vq[p1[i]], dv[i]);
		vq[p2[i]] = ((long long)vq[p2[i]] * dv[i]) / gcd(vq[p2[i]], dv[i]);
	}
	//check();
	for (i = 1; i <= n; ++i) {
		printf("%lld ", vq[i]);
	}
	return 0;
}