Cod sursa(job #494793)

Utilizator lianaliana tucar liana Data 22 octombrie 2010 22:35:17
Problema Oz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
long long d, n, m, r, v[100000], a, b, max, ok;
int i;

long long cmmdc(long long x, long long y)
{
	r=x%y;
	while (r>0)
	{
		x=y;
		y=r;
		r=x%y;
	}
	return y;
}

long long cmmmc(long long x, long long y)
{
	return x*y/cmmdc(x,y);
}

void citire()
{
	scanf("%lld %lld",&n,&m);
	for (i=1;i<=n;i++)
		v[i]=1;
	for (i=1;i<=m;i++)
	{
		scanf("%lld %lld %lld", &a, &b, &d);
		v[a]=cmmmc(v[a],d);
		v[b]=cmmmc(v[b],d);
		if ((v[a]>max) or (v[b]>max))
		{
			ok=1;
			break;
		}	
	}
}

void verificare()
{
	freopen("oz.in","r",stdin);
	scanf("%d %d",&n,&m);
	for (i=1;i<=m;i++)
	{
		scanf("%d %d %d",&a, &b, &d);
		if (cmmdc(v[a],v[b])!=d)
		{
			ok=1;
			break;
		}
	}
}

int main()
{
	freopen("oz.in","r",stdin);
	freopen("oz.out","w",stdout);
	max=2000000000;
	citire();
	if (ok==0)
		verificare();
	if (ok==0)
		for (i=1;i<=n;i++)
			printf("%lld ",v[i]);
	else
		printf("%d",-1);
	return 0;
}