Cod sursa(job #1450003)

Utilizator cristina_borzaCristina Borza cristina_borza Data 11 iunie 2015 09:51:05
Problema Oz Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <algorithm>
#include <fstream>
#define NMAX 10005
#define MMAX 100005

using namespace std;

ifstream f("oz.in");
ofstream g("oz.out");

struct elem{long long x , y , d ;} v[MMAX];
long long sol[NMAX] , n , m ;

bool comp(elem a , elem b){
    return a.x < b.x || (a.x == b.x && a.y < b.y);
}
long long cmmdc(long long x , long long y){
    long long r = x % y;
    while(y){
        r = x % y;
        x = y ;
        y = r ;
    }
    return x ;
}
long long cmmmc(long long x , long long y){
    return x / cmmdc(x , y) * y ;
}
int main()
{
    f >> n >> m ;
    for(long long i = 1 ; i <= m ; ++i){
        f >> v[i].x >> v[i].y >> v[i].d ;
        if(v[i].x < v[i].y){
            swap(v[i].x , v[i].y);
        }
    }
    sort(v + 1 , v + m + 1 , comp);
    for(long long i = 1 ; i <= m ; ++i){
        if(sol[v[i].x] == 0){
            sol[v[i].x] = v[i].d;
        }
        else{
            sol[v[i].x] = cmmmc(sol[v[i].x] , v[i].d);
        }
        if(sol[v[i].y] == 0){
            sol[v[i].y] = v[i].d;
        }
        else{
            sol[v[i].y] = cmmmc(sol[v[i].y] , v[i].d);
        }
    }
    for(long long i = 1 ; i <= n ; ++i){
        if(sol[i] == 0){
            g << -1 ;
            return 0;
        }
    }
    for(long long i = 1 ; i <= m ; ++i){
        if(cmmdc(sol[v[i].x] , sol[v[i].y]) != v[i].d){
            g << - 1 ;
            return 0 ;
        }
    }
    for(long long i = 1 ; i <= n ; ++i){
        g << sol[i] << " " ;
    }
    return 0;
}