Cod sursa(job #484572)

Utilizator ChallengeMurtaza Alexandru Challenge Data 14 septembrie 2010 20:55:24
Problema Oz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>

using namespace std;

const char InFile[]="oz.in";
const char OutFile[]="oz.out";
const int MaxN=10010;
const int MaxM=100010*3;

typedef unsigned long long uint64;

ifstream fin(InFile);
ofstream fout(OutFile);

uint64 i,j,d,v[MaxN];
int N,M;
int index_buffer[MaxM];					//imi aduce aminte de directx :))

uint64 cmmdc(uint64 a, uint64 b)
{
	uint64 r=a%b;
	while(r)
	{
		a=b;
		b=r;
		r=a%b;
	}
	return b;
}

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

int main()
{
	fin>>N>>M;
	for(register int i=1;i<=N;++i)
	{
		v[i]=1;
	}
	for(register int k=0;k<M;++k)
	{
		fin>>i>>j>>d;
		index_buffer[k*3]=i;
		index_buffer[k*3+1]=j;
		index_buffer[k*3+2]=d;
		v[i]=cmmmc(v[i],d);
		v[j]=cmmmc(v[j],d);
	}
	fin.close();

	bool good=true;

	for(register int k=0;k<M;++k)
	{
		i=index_buffer[k*3];
		j=index_buffer[k*3+1];
		d=index_buffer[k*3+2];

		if(cmmdc(v[i],v[j])!=d)
		{
			good=false;
			break;
		}
	}

	if(good)
	{
		for(register int i=1;i<=N;++i)
		{
			if(v[i]>2000000000)
			{
				good=false;
				break;
			}
		}
	}

	if(good)
	{
		for(register int i=1;i<=N;++i)
		{
			fout<<v[i]<<" ";
		}
	}
	else
	{
		fout<<"-1";
	}
	fout.close();
	return 0;
}