Cod sursa(job #164743)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 24 martie 2008 19:19:50
Problema Oz Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>
#define limit 2000000000

long n,m,i,a,b,d,v[10005];

long cmmdc(long a,long b){
    while (1){
        if (a>b){a=a%b;if (!a)return b;}
        else {b=b%a;if (!b)return a;}
    }
}

int main(){
    freopen("oz.in","r",stdin);
    freopen("oz.out","w",stdout);

    scanf("%ld %ld",&n,&m);
    for (i=1;i<=m;i++){
        scanf("%ld %ld %ld",&a,&b,&d);
        if (v[a]&&v[b]){
            d=d/cmmdc(d,cmmdc(v[a],v[b]));
            if (limit/v[a]<d||limit/v[b]<d){printf("-1\n");return 0;}
            v[a]*=d;
            v[b]*=d;
        }
        else if (v[a]==0&&v[b]){
                v[a]=d;
                d=d/cmmdc(d,v[b]);
                v[b]*=d;
            }
            else if (v[a]&&v[b]==0){
                    v[b]=d;
                    d=d/cmmdc(d,v[a]);
                    v[a]*=d;
                }
                else{
                    v[a]=d;
                    v[b]=d;
                }
    }
    for (i=1;i<=n;i++)
        if (v[i]==0){printf("-1\n");return 0;}
    for (i=1;i<=n;i++)
        printf ("%ld ",v[i]);
    printf("\n");

return 0;
}