Pagini recente » Cod sursa (job #722158) | Cod sursa (job #2737524) | Cod sursa (job #457467) | Cod sursa (job #2463768) | Cod sursa (job #3032816)
#include <fstream>
using namespace std;
ifstream fin("oz.in");
ofstream fout("oz.out");
/*
* Vom parcurge tripletele si vom lua v[k]=lcm(v[k],d), la final parcurgem tripletele si verificam daca relatia e adevarata
* si verificam daca elementele din vector sunt mai mici de 2e9
* Complexitate timp: O(MlogXMAX+N)
* Complexitate spatiu: O(N+M)
*/
struct mytuple {
int i;
int j;
int d;
};
const int N_MAX = 1e4;
const int M_MAX = 1e5;
const int LIMIT = 2e9;
int v[N_MAX];
mytuple querry[M_MAX];
int gcd(int a, int b) {
if(!b)
return a;
return gcd(b, a % b);
}
int lcm(int a, int b) {
long long aux = a / gcd(a, b) * (long long) b;
return (aux > LIMIT) ? -1 : aux;
}
int main() {
int n, m;
fin >> n >> m;
for(int i = 0; i < n; ++i)
v[i] = 1;
for(int i = 0; i < m; ++i){
fin >> querry[i].i >> querry[i].j >> querry[i].d;
--querry[i].i;
--querry[i].j;
v[querry[i].i] = lcm(v[querry[i].i], querry[i].d);
v[querry[i].j] = lcm(v[querry[i].j], querry[i].d);
}
int i = 0;
while(i < m && gcd(v[querry[i].i], v[querry[i].j]) == querry[i].d)
++i;
int j = 0;
while(j < n && v[j] >= 0)
++j;
if(i >= m && j >= n)
for(int k = 0; k < n; ++k)
fout << v[k] << ' ';
else
fout << -1;
fout.put('\n');
fin.close();
fout.close();
return 0;
}