Cod sursa(job #285090)

Utilizator drag0s93Mandu Dragos drag0s93 Data 22 martie 2009 12:50:56
Problema Oz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<stdio.h>

#define IN "oz.in","r",stdin
#define OUT "oz.out","w",stdout

int n,m;
int v[10020],poz1[100020],poz2[100020],divz[100020];

int gcd(int a, int b)
{
	 return (!b ? a : gcd(b, a%b));
}

void citire()
{
	freopen(IN);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;++i)
		scanf("%d%d%d",&poz1[i],&poz2[i],&divz[i]);
}


void solve()
{
	for(int i=1;i<=n;++i)
		v[i]=1;
	for(int i=1;i<=m;++i)
	{
		v[poz1[i]]=(long long)v[poz1[i]]*divz[i]/gcd(v[poz1[i]],divz[i]);
		v[poz2[i]]=(long long)v[poz2[i]]*divz[i]/gcd(v[poz2[i]],divz[i]);
	}
}

bool verific()
{
	for(int i=1;i<=m;++i)
		if(gcd(v[poz1[i]],v[poz2[i]])!=divz[i])
			return false;
	return true;
}

void afisare()
{
	freopen(OUT);
	if(verific()==true)
		for(int i=1;i<=n;++i)
			printf("%d ",v[i]);
	else printf("-1");
}

int main()
{
	citire();	
	solve();
	afisare();
	return 0;
}