Pagini recente » Monitorul de evaluare | Cod sursa (job #1282051) | template/preoni-2008/header | Profil M@2Te4i | Cod sursa (job #1656721)
#include <iostream>
#include <fstream>
#include <queue>
#include <cmath>
using namespace std;
ifstream in("dmin.in");
ofstream out("dmin.out");
const int N_max = 1505;
const int M_max = 2505;
const int mod = 104659;
const double INF = 2e9;
const double eps = 1.e-10;
int vf[2 * M_max];
int urm[2 * M_max];
int lst[N_max];
int nr;
double cost[2 * M_max];
queue <int> C;
double d[N_max];
int sol[N_max]; // sol[i] == CATE DRUMURI DISTINCTE CU CONSUM MINIM DE ENERGIE EXISTA INTRE PLANETA 1 SI i
int N, M;
void adauga(int x, int y, double c)
{
// ADAUGA IN LISTA LUI x PE y
nr++;
vf[nr] = y;
urm[nr] = lst[x];
cost[nr] = c;
lst[x] = nr;
}
int main()
{
int i, x, y, p, c;
double COST;
in >> N >> M;
for(i = 1; i <= M; i++)
{
in >> x >> y >> c;
double Cost = log10(c);
adauga(x, y, Cost);
adauga(y, x, Cost);
}
for(i = 2; i <= N; i++) d[i] = INF;
// INSEREZ IN COADA NODUL 1
C.push(1);
sol[1] = 1;
while( !C.empty() )
{
x = C.front();
C.pop();
// PARCURG VECINII y AI LUI x
p = lst[x];
while(p != 0)
{
y = vf[p];
COST = cost[p];
if( fabs(d[x] + COST - d[y]) < eps )
sol[y] = (sol[y] + sol[x]) % mod;
else
if( d[x] + COST < d[y] )
{
C.push(y);
d[y] = d[x] + COST;
sol[y] = sol[x];
}
p = urm[p];
}
}
for(i = 2; i <= N; i++) out << sol[i] << " ";
return 0;
}