Pagini recente » Cod sursa (job #1350962) | Cod sursa (job #2047411) | Cod sursa (job #1228312) | Cod sursa (job #1183311) | Cod sursa (job #2950933)
#include <bits/stdc++.h>
#define int unsigned long long
using namespace std;
ifstream in("dmin.in");
ofstream out("dmin.out");
int n, m;
vector <pair <int, int>> g[1501];
int fre[1501], dist[1501], cnt[1501];
struct compara
{
bool operator()(int l, int c)
{
return dist[l] > dist[c];
}
};
const int mod = 104659;
priority_queue <int, vector <int>, compara> pq;
void dijkstra()
{
while(!pq.empty())
{
int curent = pq.top();
pq.pop();
fre[curent] = 0;
//out << curent << '\n';
for(int i = 0; i < g[curent].size(); i++)
{
int vecin = g[curent][i].first;
int cost = g[curent][i].second;
if((dist[curent] * cost) % mod == dist[vecin])
{
cnt[vecin] = (cnt[vecin] + cnt[curent]) % mod;
}
if((dist[curent] * cost) % mod < dist[vecin])
{
dist[vecin] = (dist[curent] * cost) % mod;
cnt[vecin] = cnt[curent];
if(fre[vecin] == 0)
{
pq.push(vecin);
fre[vecin] = 1;
}
}
}
}
}
signed main()
{
in >> n >> m;
for(int i = 1; i <= m; i++)
{
int x, y, cost;
in >> x >> y >> cost;
g[x].push_back({y, cost});
g[y].push_back({x, cost});
}
for(int i = 1; i <= n; i++)
{
dist[i] = INT_MAX;
}
dist[1] = 1;
pq.push(1);
fre[1] = 1;
cnt[1] = 1;
dijkstra();
for(int i = 2; i <= n; i++)
out << cnt[i] << ' ';
return 0;
}