Cod sursa(job #163582)

Utilizator savimSerban Andrei Stan savim Data 22 martie 2008 14:47:52
Problema Oz Scor 100
Compilator cpp Status done
Runda preONI 2008, Runda Finala, Clasele 5-8 Marime 1.33 kb
#include <stdio.h>
int a[10010];
int ok=1,i,k,n,m,p,q,d;
FILE *f1,*f2;
int cmmdc(int p, int q)
{
    int a=p,b=q,r;

    while (a%b!=0)
    {
        r=a%b;
        a=b;
        b=r;
    }
    return b;
}
int main()
{
    f1=fopen("oz.in","r");
    f2=fopen("oz.out","w");

    fscanf(f1,"%d %d",&n,&m);

    for (i=1; i<=n; i++) a[i]=1;

    ok=1;
    for (i=1; i<=m; i++)
    {
        fscanf(f1,"%d %d %d",&p,&q,&d);
        if (a[q]%d!=0)
        {
            k=cmmdc(a[q],d);
            if ((long long)a[q]*(d/k)>2000000000)
            {
                ok=0;
                break;
            }
            a[q]=a[q]*(d/k);
        }

        if (a[p]%d!=0)
        {
            k=cmmdc(a[p],d);
            if ((long long)a[p]*(d/k)>2000000000)
            {
                ok=0;
                break;
            }
            a[p]=a[p]*(d/k);
        }
    }

    //verificare
    fclose(f1);
    f1=fopen("oz.in","r");
    fscanf(f1,"%d %d",&n,&m);
    for (i=1; i<=m; i++)
    {
        fscanf(f1,"%d %d %d",&p,&q,&d);
        if (cmmdc(a[p],a[q])!=d)
        {
            ok=0;
            break;
        }
    }
    if (ok)
        for (i=1; i<=n; i++)
            fprintf(f2,"%d ",a[i]);
    else fprintf(f2,"-1\n");

    fclose(f1);
    fclose(f2);
    return 0;
}