Cod sursa(job #1135394)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 7 martie 2014 19:50:11
Problema Oz Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>
#define Nmax 10005
#define Mmax 100005

using namespace std;

int N,M,v[Nmax];

struct oper
{
    int i,j,d;
};
oper op[Mmax];

inline int CMMDC(int x, int y)
{
    int r=x%y;
    while(r)
    {
        x=y; y=r; r=x%y;
    }
    return y;
}

inline int CMMMC(int x, int y)
{
    int d=CMMDC(x,y);
    long long sol;
    sol=(1LL*x*y)/d;
    if(sol>2000000000)
        return -1;
    return sol;
}

int main()
{
    int i,t,ok=1;
    freopen ("oz.in","r",stdin);
    freopen ("oz.out","w",stdout);
    scanf("%d%d", &N,&M);
    for(i=1;i<=N;++i)
        v[i]=1;
    for(t=1;t<=M;++t)
    {
        scanf("%d%d%d", &op[t].i,&op[t].j,&op[t].d);
        v[op[t].i]=CMMMC(v[op[t].i],op[t].d);
        v[op[t].j]=CMMMC(v[op[t].j],op[t].d);
        if(v[op[t].i]==-1 || v[op[t].j]==-1)
        {
            ok=0;
            break;
        }
    }
    for(t=1;t<=M;++t)
        if(CMMDC(v[op[t].i],v[op[t].j])!=op[t].d)
        {
            ok=0;
            break;
        }
    if(!ok)
        printf("-1\n");
    else
    {
        for(i=1;i<=N;++i)
            printf("%d ", v[i]);
        printf("\n");
    }
    return 0;
}