Cod sursa(job #164395)

Utilizator vanila_CPPIonescu Victor Cristian vanila_CPP Data 24 martie 2008 09:57:54
Problema Oz Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#define FIN "oz.in"
#define FOUT "oz.out"
#define MAX_N 10000
#define MAX_OP 100000
using namespace std;
typedef long long ll;
ll n,v[MAX_N+1],m,nrop=0;
struct operatie{
	int x,y,d;
} op[MAX_OP+1];

void iofile(void){
	freopen(FIN,"rt",stdin);
	freopen(FOUT,"wt",stdout);
	scanf("%lld%lld",&n,&m);
	for (ll i=1;i<=n;i++){
		v[i]=1;
	}
	return ;
}


int gcd(ll x,ll y){
	int r;
	while (y) {
	r=x%y;
	x=y;
	y=r;}
	return x;
}

void solve(void){
	ll x,y,d,diviz;
	for (ll i=1;i<=m;i++){
		scanf("%d%d%d",&x,&y,&d);
		nrop++;
		op[nrop].x=x;op[nrop].y=y;op[nrop].d=d;
		diviz=gcd(v[x],d);
		v[x]=(v[x]*d)/diviz;
		diviz=gcd(v[y],d);
		v[y]=(v[y]*d)/diviz;
	}
	fclose(stdin);
	return ;
}


void end_of_program(void){
	ll ok=1;
	for (ll i=1;i<=m;i++){
		if (gcd(v[op[i].x],v[op[i].y])!=op[i].d){
			ok=0;
			break;
		}
	}
	if (ok){
		for (ll i=1;i<n;i++){printf("%d ",v[i]);}
		printf("%d\n",v[n]);
	} else {printf("%d\n",-1);}
	fclose(stdout);
	return ;
}


int main(void){
	iofile();
	solve();
	end_of_program();
	return 0;
}