Cod sursa(job #189215)

Utilizator AndreyPAndrei Poenaru AndreyP Data 12 mai 2008 22:02:40
Problema Oz Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<stdio.h>
int n,m;
int v[100010];
int cmmdc(int a,int b)
{
	int r;
	while(b)
	{
		r=a%b;
		a=b;
		b=r;
	}
	return a;
}
int main()
{
	freopen("oz.in","r",stdin);
	freopen("oz.out","w",stdout);
	scanf("%d%d",&n,&m);
	int i,x,y,d,div;
	long long aux;
	for(i=1; i<=n; i++)
		v[i]=1;
	for(i=0; i<m; i++)
	{
		scanf("%d%d%d",&x,&y,&d);
		if((x<1)||(y<1)||(x>n)||(y>n))
		{
			printf("-1\n");
			return 0;
		}
		div=cmmdc(v[x],d);
		if(d/div>2000000000/v[x])
		{
			printf("-1\n");
			return 0;
		}
		aux=d/div*v[x];
		if(aux>2000000000)
		{
			printf("-1\n");
			return 0;
		}
		v[x]=(int)aux;
		div=cmmdc(v[y],d);
		if(d/div>2000000000/v[y])
		{
			printf("-1\n");
			return 0;
		}
		aux=d/div*v[y];
		if(aux>2000000000)
		{
			printf("-1\n");
			return 0;
		}
			v[y]=(int)aux;
		div=cmmdc(v[x],v[y]);
		if(div!=d)
		{
			printf("-1\n");
			return 0;
		}
	}
	for(i=1; i<n; i++)
	{
	//	if(v[i]==0)
		//	v[i]=1;
		printf("%d ",v[i]);
	}
	//if(v[n]==0)
	//	v[n]=1;
	printf("%d\n",v[n]);
	return 0;
}