Cod sursa(job #428125)

Utilizator nandoLicker Nandor nando Data 28 martie 2010 21:06:45
Problema Oz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>

typedef long long int64;

inline int64 cmmdc(int64 a,int64 b){
	int64 r;
	while(b){
		r=a%b;
		a=b;
		b=r;
	}
	return a;
}
inline int64 cmmmc(int64 a,int64 b){
	return 1L*a*b/cmmdc(a,b);
}

FILE* fin=fopen("oz.in","r");
FILE* fout=fopen("oz.out","w");

#define NMAX 10005
#define MMAX 100005

int64 n,m,v[NMAX],per[MMAX][3];

int main(){
	fscanf(fin,"%lld %lld",&n,&m);

	for(int i=0;i<n;i++){
		v[i]=1;
	}

	for(int i=0;i<m;i++){
		fscanf(fin,"%lld %lld %lld",&per[i][0],&per[i][1],&per[i][2]);
		v[per[i][0]-1]=cmmmc(v[per[i][0]-1],per[i][2]);
		v[per[i][1]-1]=cmmmc(v[per[i][1]-1],per[i][2]);
	}
	bool good=true;
	for(int i=0;i<m;i++){
		if(cmmdc(v[per[i][0]-1],v[per[i][1]-1])!=per[i][2]){
			good=false;
			break;
		}
	}
	if(good){
		for(int i=0;i<n;i++){
			fprintf(fout,"%lld ",v[i]);
		}
	}else{
		fprintf(fout,"-1");
	}
	
	fclose(fin);
	fclose(fout);
	return 0;
}