Pagini recente » Cod sursa (job #3210121) | Rating Caciur-Aioanei Tudor (SMg4587) | Cod sursa (job #1447874) | Cod sursa (job #2328696) | Cod sursa (job #2716347)
#include <bits/stdc++.h>
#define ABS(x) ((x) >= 0 ? (x) : -(x))
#define INF 0x3f3f3f3f
using namespace std;
using ld = long double;
ifstream fin("dmin.in");
ofstream fout("dmin.out");
const int mod = 104659;
const int NMAX = 2048;
const ld EPS = 1e-6;
int N, M;
pair<ld,int> dp[NMAX];
vector<pair<int,ld>> G[NMAX];
priority_queue<pair<ld,int>,vector<pair<ld,int>>,greater<pair<ld,int>>> Q;
void add_self(int &a, int b) {
a += b;
if(a >= mod)
a -= mod;
}
void Dijkstra() {
for(int u = 1; u <= N; ++u)
dp[u] = make_pair(1.0 * INF, 0);
dp[1] = make_pair(0.0, 1);
Q.push(make_pair(0.0, 1));
while(!Q.empty()) {
int u = Q.top().second;
ld d = Q.top().first;
Q.pop();
if(ABS(d - dp[u].first) > EPS)
continue;
for(const auto &v : G[u]) {
ld best = d + v.second;
if((dp[v.first].first - best) > EPS) {
dp[v.first].first = best;
dp[v.first].second = dp[u].second;
Q.push(make_pair(dp[v.first].first, v.first));
}
else
if(ABS(dp[v.first].first - best) <= EPS)
add_self(dp[v.first].second, dp[u].second);
}
}
}
int main() {
fin >> N >> M;
for(int i = 0; i < M; ++i) {
int u, v;
ld w;
fin >> u >> v >> w;
w = log2(w);
G[u].emplace_back(v, w);
G[v].emplace_back(u, w);
}
Dijkstra();
for(int u = 2; u <= N; ++u)
fout << dp[u].second << ' ';
fout << '\n';
}