Cod sursa(job #555319)

Utilizator tudorsTudor Siminic tudors Data 15 martie 2011 13:44:13
Problema Oz Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#define MA 101001
using namespace std;
typedef struct {long long a,b,d;} TRIPLET;
TRIPLET A[MA];
long long  n,m;
long long REZ[11001];

FILE *f,*g;

void citire()
{
	int i;
	fscanf(f,"%lld %lld",&n,&m);
	for (i=1;i<=m;++i)
		fscanf(f,"%lld %lld %lld",&A[i].a,&A[i].b,&A[i].d);
}

int cmmdc(int a, int b)
{
	int r;
	while (b>0)
	{
		r=a%b;
		a=b;
		b=r;
	}
	return a;
}

int cmmmc(int a, int b)
{
	if (a>=b)
		return ((a*b)/cmmdc(a,b));
	else
		return ((a*b)/cmmdc(b,a));
}

void solve()
{
	int i,ok;
	for (i=1;i<=n;++i)
		REZ[i]=1;
	for (i=1;i<=m;++i)
	{
		REZ[A[i].a]=cmmmc(REZ[A[i].a],A[i].d);
		REZ[A[i].b]=cmmmc(REZ[A[i].b],A[i].d);
	}
	ok=1;
	for (i=1;i<=m;++i)
		if (cmmdc(REZ[A[i].a],REZ[A[i].b])!=A[i].d || REZ[A[i].a]>=2000000000 || REZ[A[i].b]>=2000000000)
		{
			ok=0;
			break;
		}
	if (ok)
		for (i=1;i<=n;++i)
			fprintf(g,"%lld ",REZ[i]);
	else
		fprintf(g,"%d",-1);
}

int main()
{
	f=fopen("oz.in","r");
	g=fopen("oz.out","w");
	citire();
	solve();
	fclose(f);
	fclose(g);
	return 0;
}