Cod sursa(job #487142)

Utilizator Teodor94Teodor Plop Teodor94 Data 23 septembrie 2010 21:55:27
Problema Oz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<fstream>
#include<cstdio>

using namespace std;

const int N=10005;
const int M=300015;

long long i,j,d,v[N];
int a[M],n,m;

long long cmmdc(long long a, long long b)
{
	long long r=a%b;
	while(r)
	{
		a=b;
		b=r;
		r=a%b;
	}
	return b;
}

long long cmmmc(long long a, long long b)
{
	return a*b/cmmdc(a,b);
}

void init()
{
	for (int i=1;i<=n;++i)
		v[i]=1;
}

int main()
{
	freopen("oz.in","r",stdin);
	freopen("oz.out","w",stdout);
	scanf("%d%d",&n,&m);
	init();
	for(int k=0;k<m;++k)
	{
		scanf("%d%d%d",&i,&j,&d);
		a[k*3]=i;
		a[k*3+1]=j;
		a[k*3+2]=d;
		v[i]=cmmmc(v[i],d);
		v[j]=cmmmc(v[j],d);
	}
	bool ok=true;
	for(int k=0;k<m;++k)
	{
		i=a[k*3];
		j=a[k*3+1];
		d=a[k*3+2];
		if(cmmdc(v[i],v[j])!=d)
		{
			ok=false;
			break;
		}
	}
	if (ok)
		for(int i=1;i<=n;++i)
			if(v[i]>2000000000)
			{
				ok=false;
				break;
			}
	if (ok)
	{
		for(int i=1;i<=n;++i)
			printf("%d ",v[i]);
		printf("\n");
	}
	else
		printf("-1\n");
	return 0;
}