Pagini recente » Cod sursa (job #1368180) | Cod sursa (job #1789785) | Cod sursa (job #698687) | Cod sursa (job #1191582) | Cod sursa (job #1066762)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int Nmax = 10001;
const int Mmax = 100001;
struct nod
{
int i, j;
long long d;
} v[Mmax];
int N, M;
long long sol[Nmax];
long long gcd( long long a, long long b )
{
if ( a == b )
return a;
if ( a == 0 )
return b;
if ( b == 0 )
return a;
if ( ~a & 1 )
{
if ( b & 1 )
return gcd( a >> 1, b );
else
return gcd( a >> 1, b >> 1 ) << 1;
}
if ( ~b & 1 )
return gcd( a, b >> 1 );
if ( a > b )
return gcd( ( a - b ) >> 1, b );
else
return gcd( ( b - a ) >> 1, a );
}
long long lcm( long long a, long long b )
{
return a * b / gcd( a, b );
}
int valid()
{
for ( int i = 1; i <= M; ++i )
{
if ( gcd( sol[ v[i].i ], sol[ v[i].j ] ) != v[i].d )
return 0;
}
return 1;
}
int main()
{
ifstream f("oz.in");
ofstream g("oz.out");
f >> N >> M;
fill( sol + 1, sol + N + 1, 1 );
for ( int i = 1; i <= M; ++i )
{
f >> v[i].i >> v[i].j >> v[i].d;
sol[ v[i].i ] = lcm( sol[ v[i].i ], v[i].d );
sol[ v[i].j ] = lcm( sol[ v[i].j ], v[i].d );
}
if ( valid() == 0 )
g << "-1\n";
else
{
for ( int i = 1; i <= N; ++i )
g << sol[i] << " ";
g << "\n";
}
return 0;
}