Pagini recente » Cod sursa (job #201881) | Cod sursa (job #1402346) | Cod sursa (job #299700) | Cod sursa (job #883844) | Cod sursa (job #2024228)
#include <fstream>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <vector>
#include <set>
using namespace std;
ifstream f("dmin.in");
ofstream g("dmin.out");
const int N = 1505, mod = 104569;
const long double EPS = 1e-10;
set <pair <long double, int> > q;
vector <int> ls[N];
vector<long double> lc[N];
int n, m, x, y, i, j, l;
long double d[N], c;
int sol[N];
int main() {
f >> n >> m;
while (m--) {
f >> x >> y >> c;
c = log(c);
ls[x].push_back(y);
lc[x].push_back(c);
ls[y].push_back(x);
lc[y].push_back(c);
}
for (i = 2; i <= n; i++)
d[i] = 1e18;
sol[1] = 1;
q.insert(make_pair(0,1));
set<pair<long double, int> >::iterator w;
while (!q.empty()) {
x = q.begin() -> second;
q.erase(q.begin());
l = ls[x].size();
for (i = 0; i < l; i++) {
y = ls[x][i];
c = lc[x][i];
if (d[x]+c < d[y]-EPS) {
if ((w = q.find(make_pair(d[y],y))) != q.end())
q.erase(w);
d[y] = d[x]+c;
sol[y] = sol[x];
q.insert(make_pair(d[y], y));
} else if (abs(d[x]+c - d[y]) <= EPS) {
sol[y] = (sol[y]+sol[x])%mod;
}
}
}
for (i = 2; i <= n; i++)
g << sol[i] << ' ';
}