Cod sursa(job #2260642)

Utilizator divianegoescuDivia Negoescu divianegoescu Data 15 octombrie 2018 12:00:56
Problema Oz Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.96 kb
#include <fstream>
#include <stdio.h>
FILE *fin=fopen("oz.in","r");
using namespace std;
ofstream fout("oz.out");

long long n,i,j,nrmodif;
long long m,k,d;
long long prime[4650];
long long v[10003];
bool c[44725];
void ciur()
{
    long long i,j,nr;
    c[1]=1;
    for(i=2; i<=211; i++)
        if(c[i]==0)
            for(j=i*2; j<=44722; j+=i)
                c[j]=1;
    nr=0;
    for(i=2; i<=44722; i++)
        if(c[i]==0) prime[++nr]=i;

}
int descompuneX(long long x)
{
    long long  p=1;
    if(v[i]==-1)
    {
        v[i]=1;
        nrmodif--;
    }
    if(v[j]==-1)
    {
        v[j]=1;
        nrmodif--;
    }
    while(x>1 && prime[p]<=x/prime[p])
    {
        if(x%prime[p]==0)
        {
            long long factor=1;
            while(x%prime[p]==0)
            {
                factor*=prime[p];
                x/=prime[p];
            }
            while(v[i]%factor!=0)
                v[i]*=prime[p];
            while(v[j]%factor!=0)
                v[j]*=prime[p];
        }
        p++;
    }
    if(x>1)
    {
        if(v[i]%x!=0)
            v[i]*=x;
        if(v[j]%x!=0)
            v[j]*=x;
    }
    if(v[i]> 2000000000) return 0;
    else if(v[j]> 2000000000) return 0;
    else return 1;
}
int main()
{

    ciur();
    fscanf(fin,"%lld%lld",&n,&m);
    if(m<n/2)
    {
        fout<<"-1";
        return 0;
    }
    nrmodif=n;
    for(i=1; i<=n; i++)
        v[i]=-1;
    /*i=2;j=4;
    v[i]=2; v[j]=-1;
    descompuneX(17);
    for(k=1;k<=n;k++)
    {
        fout<<v[k]<<" ";
    }*/
    for(k=1; k<=m; k++)
    {
        fscanf(fin,"%lld%lld%lld",&i,&j,&d);
        descompuneX(d);
        if(descompuneX(d)==0){fout<<"-1";return 0;}
       /// for(int l=1;l<=n;l++)
         //  fout<<v[l]<<" ";
       // fout<<"\n";
    }
    if(nrmodif>0)
    {
        fout<<"-1";
        return 0;
    }
    for(k=1; k<=n; k++)
        fout<<v[k]<<" ";
    return 0;
}