Cod sursa(job #171494)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 4 aprilie 2008 14:46:04
Problema Oz Scor 80
Compilator c Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>
#include <stdlib.h>
#define N 10010
#define MAX 2000000000
long long v[N];
char prez[N];
int n,m;
long long cmmdc(long long a,long long b){
    if (b==0)
       return a;
    else return cmmdc(b,a%b);
}
long long cmmmc(long long a,long long b){
	long long c;
	c=a;
	c*=b;
	return c/cmmdc(a,b);
}	
void add(int i,int j,int d){
    v[i]=cmmmc(v[i],d);
	v[j]=cmmmc(v[j],d);
	if (v[i]>MAX || v[j]>MAX){
       printf("-1\n");
       fclose(stdout);
       exit(0);
    }
	if (cmmdc(v[i]/d,v[j]/d)!=1){
       printf("-1\n");
       fclose(stdout);
	   exit(0);
    }
}
void init(){
	int i;
	for (i=1;i<=n;++i){
		v[i]=1;
		prez[i]=0;
    }
}
void scan(){
	int i,j,d;
	freopen("oz.in","r",stdin);
	freopen("oz.out","w",stdout);
	scanf("%d%d",&n,&m);
	init();
	while (m--){
		scanf("%d%d%d",&i,&j,&d);
		add(i,j,d);
		prez[i]=prez[j]=1;
	}
}
void print(){
	int i;
	for (i=1;i<=n;++i)
	    if ((prez[i]==0 && v[i]!=1) || (v[i]>=MAX)){
           printf("-1\n");
           exit(0);
        }
	for (i=1;i<=n;++i)
		printf("%lld ",v[i]);
	printf("\n");
	fclose(stdin);
	fclose(stdout);
}
int main(){
	scan();
	print();
	return 0;
}