Cod sursa(job #1967018)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 15 aprilie 2017 19:51:55
Problema Oz Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
# include <fstream>
# include <vector>
# define DIM 10010
# define vecin first
# define c second
using namespace std;
ifstream fin("oz.in");
ofstream fout("oz.out");
vector<pair<int,int> > Lista[DIM];
int Marcat[DIM],d[3][10*DIM],n,m,x,y,cost,i;
int cmmdc(int a,int b){
    while(b){
        int r=(a%b);
        a=b;
        b=r;
    }
    return a;
}
int cmmmc(int a,int b){
    return 1LL*a*b/cmmdc(a,b);
}
void dfs(int nc){
    int r=1;
    Marcat[nc]=1;
    for(int i=0;i<Lista[nc].size();i++){
        int nv=Lista[nc][i].vecin;
        int cost=Lista[nc][i].c;
        r=cmmmc(r,cost);
        if(Marcat[nv]==0)
            dfs(nv);
    }
    Marcat[nc]=r;
}
int main () {
    fin>>n>>m;
    for(i=1;i<=m;i++){
        fin>>x>>y>>cost;
        Lista[x].push_back(make_pair(y,cost));
        Lista[y].push_back(make_pair(x,cost));
        d[0][i]=x;
        d[1][i]=y;
        d[2][i]=cost;
    }
    for(i=1;i<=n;i++)
        if(Marcat[i]==0)
            dfs(i);
    for(i=1;i<=m;i++){
        x=d[0][i];
        y=d[1][i];
        cost=d[2][i];
        if(cmmdc(Marcat[x],Marcat[y])!=cost){
            fout<<"-1\n";
            return 0;
        }
    }
    for(i=1;i<=n;i++)
        fout<<Marcat[i]<<" ";
    fout<<"\n";
    return 0;
}