Cod sursa(job #163629)

Utilizator ioraIoana Radu iora Data 22 martie 2008 14:50:01
Problema Oz Scor 15
Compilator cpp Status done
Runda preONI 2008, Runda Finala, Clasele 5-8 Marime 1.34 kb
#include<stdio.h>
long ok=1,x,y,r,n,m,i,div,d,c1,c2,p1[10000],p2[10000],a[10000],dd[10000];
int main()
{
	freopen("oz.in","r",stdin);
	freopen("oz.out","w",stdout);
	
	scanf("%ld %ld",&n,&m);
	
	for(i=1;i<=n;++i)
		a[i]=1;
	
	for(i=1;i<=m;++i)
	{
		scanf("%ld %ld %ld",&p1[i],&p2[i],&d);
		c1=a[p1[i]];
		c2=a[p2[i]];
		dd[i]=d;
		div=2;
		while(d%div==0)
			{
				if((c1%div==0&&c2%div==1))
				{
					a[p2[i]]=a[p2[i]]*div;
					c1=c1/div;
				}
				else
					
				if(c1%div==1&&c1%div==0)
				{
					a[p1[i]]=a[p1[i]]*div;
					c2=c2/div;
				}
				else
				if(c1%div&&c2%div)
				{
					a[p1[i]]*=div;
					a[p2[i]]*=div;
				}
				d/=div;
		}
		div=1;
		while(div<d)
		{
			div+=2;
			while(d%div==0)
			{
				if((c1%div==0&&c2%div==1))
				{
					a[p2[i]]=a[p2[i]]*div;
					c1=c1/div;
				}
				else
					
				if(c1%div==1&&c1%div==0)
				{
					a[p1[i]]=a[p1[i]]*div;
					c2=c2/div;
				}
				else
				if(c1%div&&c2%div)
				{
					a[p1[i]]*=div;
					a[p2[i]]*=div;
				}
				d/=div;
			}
		}
    }
	ok=1;
	for(i=1;i<=m;++i)
	{
        x=a[p1[i]];
        y=a[p2[i]];
		r=x%y;
        while(r)
		{
            x=y;
            y=r;
			r=x%y;
		}	
		if(y!=dd[i]) {ok=0; break;}
    }
    if(ok==0) printf("-1");
	else
		for(i=1;i<=n;++i)
			printf("%ld ",a[i]); 
	return 0;
}