Cod sursa(job #388722)

Utilizator loginLogin Iustin Anca login Data 30 ianuarie 2010 19:44:41
Problema Oz Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
# include <fstream>
# include <iostream>
# include <cstdlib>
using namespace std;
struct nod{
	int i, d;
	nod *next;};
long long int v[10003], n, m;
nod  *a[10003];

void add (int i, int j, int d)
{
	nod *p=new nod;
	p->i=j;
	p->d=d;
	p->next=a[i];
	a[i]=p;
}

void corecteaza (int p, int d)
{
	if (v[p]>1 && d%v[p]==0)
		v[p]=d;
	else
		v[p]*=d;
}

void read ()
{
	ifstream fin ("oz.in");
	fin>>n>>m;
	for (int i=1;i<=n;i++)
		v[i]=1;
	int i, j, d;
	for (int k=1;k<=m;k++)
	{
		fin>>i>>j>>d;
		corecteaza (i, d);
		corecteaza (j, d);
		add(i, j, d);
		add(j, i, d);
	}
}

int cmmdc (int a, int b)
{
	int r;
	do{
		r=a%b;
		a=b;
		b=r;
	}
	while (r);
	return a;
}

int verifica ()
{
	for (int i=1;i<=n;i++)
		for (nod *p=a[i]; p ;p=p->next)
			if (cmmdc(v[i], v[p->i])!=p->d)
				return 0;
	return 1;
}	

void afis ()
{
	ofstream fout ("oz.out");
	for (int i=1;i<=n;i++)
		fout<<v[i]<<" ";
}

int main ()
{
	read ();
	if (verifica())
		afis ();
	else
	{
		ofstream fout ("oz.out");
		fout<<"-1";
	}
	return 0;
}