Pagini recente » Cod sursa (job #1400768) | Cod sursa (job #2903432) | Cod sursa (job #1032468) | Cod sursa (job #1525964) | Cod sursa (job #164031)
Cod sursa(job #164031)
#include<stdio.h>
#include<string.h>
#define INPUT "oz.in"
#define OUTPUT "oz.out"
#define NMAX 10001
#define VMAX 2000000000
#define CL(x) memset(x,0,sizeof(x));
FILE *fin = fopen(INPUT, "r"),*fout = fopen(OUTPUT, "w");
/*
typedef struct lista
{
long value;
struct lista *next;
};
lista *p[ NMAX ];
*/
long N, M;
long minDiv[ NMAX ];
void readValues();
void solveFunction();
inline long euclid(long, long);
void printSolution();
int main()
{
readValues();
solveFunction();
fclose(fin);
fclose(fout);
return 0;
}
void readValues()
{
//lista *adr;
// long nod1, nod2, diviz;
fscanf(fin, "%ld %ld", &N, &M);
/* for(long i = 0; i <= M; ++i)
{
fscanf(fin, "%ld %ld %ld", &nod1, &nod2, &diviz);
adr = new lista;
adr -> value = diviz;
adr -> next = p[ nod1 - 1 ];
p[ nod1 - 1 ] = adr;
adr = new lista;
adr -> value = diviz;
adr -> next = p[ nod2 - 1 ];
p[ nod2 - 1 ] = adr;
}*/
}
void solveFunction()
{
long long temp;
int Valid = 1;
long nod1, nod2, diviz;
//lista *adr;
for(long i = 0; i < M; ++i)
{
fscanf(fin, "%ld %ld %ld", &nod1, &nod2, &diviz);
if(minDiv[ nod1 - 1 ])
{
temp = (long long)minDiv[ nod1 - 1 ] * (long long)diviz;
minDiv[ nod1 - 1 ] = temp / euclid(minDiv[ nod1 - 1 ], diviz);
}
else
minDiv[ nod1 - 1 ] = diviz;
if(minDiv[ nod2 - 1 ])
{
temp = (long long)minDiv[ nod2 - 1 ] * (long long)diviz;
minDiv[ nod2 - 1 ] = temp / euclid(minDiv[ nod2 - 1 ], diviz);
}
else
minDiv[ nod2 - 1 ] = diviz;
if(minDiv[ nod1 - 1 ] > VMAX)
{
fprintf(fout, "-1\n");
Valid = 0;
}
else
if(minDiv[ nod2 - 1 ] > VMAX)
{
fprintf(fout, "-1\n");
Valid = 0;
}
/*adr = p[ i ];
minDiv[ i ] = adr -> value;
while(adr -> next != NULL)
{
adr = adr -> next;
temp = (long long)minDiv[ i ] * (long long) (adr -> value);
minDiv[ i ] = temp / euclid(minDiv[ i ], adr -> value);
if(minDiv[ i ] > VMAX)
{
fprintf(fout, "-1\n");
Valid = 0;
}
}*/
}
if(Valid) printSolution();
}
inline long euclid(long A, long B)
{
if(!B) return A;
else return euclid(B, A%B);
}
void printSolution()
{
for(long i = 0; i < N; ++i)
fprintf(fout, "%ld ", minDiv[ i ]);
fprintf(fout, "\n");
}