Pagini recente » Cod sursa (job #2788489) | Cod sursa (job #1153635) | Cod sursa (job #1768501) | Cod sursa (job #1656694) | Cod sursa (job #1656734)
#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;
bool inC[N_max];
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;
double c, 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;
inC[1] = true;
while( !C.empty() )
{
x = C.front();
C.pop();
inC[x] = false;
// 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]%mod + sol[x]%mod) % mod;
}
else
if(d[y] - d[x] - COST > eps)
{
if(!inC[y])
{
C.push(y);
inC[y] = true;
}
d[y] = d[x] + COST;
sol[y] = sol[x];
}
p = urm[p];
}
}
for(i = 2; i <= N; i++) out << sol[i] << " ";
return 0;
}