Cod sursa(job #555301)

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

FILE *f,*g;

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

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

int cmmmc(int a, int 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,"%d ",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;
}