Cod sursa(job #1009899)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 13 octombrie 2013 23:09:48
Problema Oz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<cstdio>
int n,m,i,j,r,ok,a[100001],b[100001];
long long p,v[100001],x[100001],q;
FILE *f,*g;
long long cmmmc(long long n, long long m){
    long long a=n,b=m;
    long long r;
    r=a%b;
    while(r>0){
        a=b;
        b=r;
        r=a%b;
    }
    return m*n/b;
}
int main(){
    f=fopen("oz.in","r");
    g=fopen("oz.out","w");
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=n;i++){
        v[i]=1;
    }
    for(i=1;i<=m;i++){
        fscanf(f,"%d%d%lld",&a[i],&b[i],&x[i]);
        v[a[i]]=cmmmc(v[a[i]],x[i]);
        v[b[i]]=cmmmc(v[b[i]],x[i]);
    }
    ok=1;
    for(i=1;i<=m;i++){
        p=v[a[i]];
        q=v[b[i]];
        r=p%q;
        while(r>0){
            p=q;
            q=r;
            r=p%q;
        }
        if(q!=x[i]){
            ok=0;
            break;
        }
    }
    if(ok==0)
        fprintf(g,"-1");
    else
        for(i=1;i<=n;i++){
            fprintf(g,"%d ",v[i]);
        }
    fclose(f);
    fclose(g);
    return 0;
}