Cod sursa(job #1413008)

Utilizator savulescustefanSavulescu Stefan savulescustefan Data 1 aprilie 2015 18:02:25
Problema Oz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <cstdio>

using namespace std;
int i,j,n,m,y[100004],x[100004],d[100004],b,c,r;
long long a[10004];
bool ok;
int main()
{
    freopen ("oz.in","r",stdin);
    freopen ("oz.out","w",stdout);
    scanf ("%d %d", &n, &m);
    for (i=1;i<=n;i++)
    a[i]=1LL;
    for (i=1;i<=m;i++)
    {
        scanf ("%d %d %d", &x[i], &y[i], &d[i]);
        if (a[x[i]]>d[i])
        {
            b=a[x[i]];
            c=d[i];
        }
        else
        {
            b=d[i];
            c=a[x[i]];
        }
        r=b%c;
        while (r!=0)
        {
            b=c;
            c=r;
            r=b%c;
        }
        a[x[i]]=(1LL)*a[x[i]]*d[i]/c;
        if (a[x[i]]>2000000000)
        {
            ok=true;
            break;
        }
        if (a[y[i]]>d[i])
        {
            b=a[y[i]];
            c=d[i];
        }
        else
        {
            b=d[i];
            c=a[y[i]];
        }
        r=b%c;
        while (r!=0)
        {
            b=c;
            c=r;
            r=b%c;
        }
        a[y[i]]=(1LL)*a[y[i]]*d[i]/c;
        if (a[y[i]]>2000000000)
        {
            ok=true;
            break;
        }
    }
    if (ok==false)
    {
    for (i=1;i<=m;i++)
    {
        if (a[x[i]]>a[y[i]])
        {
            b=a[x[i]];
            c=a[y[i]];
        }
        else
        {
            b=a[y[i]];
            c=a[x[i]];
        }
        r=b%c;
        while (r!=0)
        {
            b=c;
            c=r;
            r=b%c;
        }
        if (c!=d[i])
        {
            ok=true;
            break;
        }
    }
    }
    if (ok==true)
    printf ("%d", -1);
    else
    {
        for (i=1;i<=n;i++)
        printf ("%lld ", a[i]);
    }
    return 0;
}