Cod sursa(job #390298)

Utilizator cristiprgPrigoana Cristian cristiprg Data 3 februarie 2010 14:00:54
Problema Oz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>
int v[10005], m, n, x[100005], y[100005], D[100005];

int cmmdc(int a, int b)
{
    if (b != 0)
        return cmmdc(b, a%b);
    else
        return a;
}

bool OK()
{
    for (int i = 1; i <= m; ++i)
        if (cmmdc(v[x[i]], v[y[i]]) != D[i])
            return false;

    return true;
}

int main()
{
    FILE *f = fopen("oz.in", "r"), *fout = fopen ("oz.out", "w");
    fscanf(f, "%d%d", &n, &m);
    for (int i = 1; i <= n; ++i)
        v[i] = 1;

    for (int i, j, d, c, k = 1; k <= m; ++k)
    {
        fscanf(f, "%d%d%d", &i, &j, &d);
        x[k] = i, y[k] = j, D[k] = d;
        c = cmmdc(v[i], d);
        v[i] *=d/c;

        //aceeasi chestie pt j
        c = cmmdc(v[j], d);
        v[j] *=d/c;

    }
    if (OK())
        for (int i = 1; i <= n; ++i)
            fprintf (fout, "%d ", v[i]);
    else
        fprintf (fout, "-1");
    fprintf (fout, "\n");

    fclose(f);
    fclose(fout);

    return 0;
}