Cod sursa(job #489435)

Utilizator DuxarFII-Stefan-Negrus Duxar Data 2 octombrie 2010 16:33:01
Problema Oz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<cstdio>
#define dmil 2000000000
using namespace std;

long n,m,a[10001],ok1;

void build();
void check();
void write();
long long cmmmc ( long long A,long long B);
long long cmmdc (long long A,long long B);

int main()
{
	freopen ("oz.in","r",stdin);
	freopen ("oz.out","w",stdout);
	
	build();
	check();
	if (!ok1) write();
	else printf("-1");
	return 0;
}
	
void build()
{
	int i,x,y,d;
	long long x2;
	scanf("%ld%ld",&n,&m);
	for (i=1;i<=n;a[i++]=1);
	for (i=1;i<=m;++i)
	{
		scanf("%ld%ld%ld",&x,&y,&d);
		
		x2=cmmmc(a[x],d);
		if (x2>dmil) {ok1=1; return;}
		a[x]=x2;
		
		x2=cmmmc(a[y],d);
		if (x2>dmil) {ok1=1; return;}
		a[y]=x2;
	}
}

void check()
{
	int i,x,y,d;
	freopen ("oz.in","r",stdin);
	scanf("%ld%ld",&n,&m);
	for (i=1;i<=m;++i)
	{
		scanf("%ld%ld%ld",&x,&y,&d);
		if (cmmdc(a[x],a[y])!=d) {ok1=1; return;}
	}
}

long long cmmmc(long long A,long long B)
{
	return ((A/cmmdc(A,B))*B);
}

void write()
{
	int i;
	for (i=1;i<=n;printf("%ld ",a[i++]));
}

long long cmmdc(long long A,long long B)
{
	long long r;
	while (B)
	{
		r=A%B;
		A=B;
		B=r;
	}
	return A;
}