Cod sursa(job #555333)

Utilizator tudorsTudor Siminic tudors Data 15 martie 2011 13:50:13
Problema Oz Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 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);
}

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

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

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,"-1");
}

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