Pagini recente » Cod sursa (job #2942320) | Cod sursa (job #2896529) | Cod sursa (job #3232794) | Cod sursa (job #2583554) | Cod sursa (job #1393276)
#include <fstream>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
#define MOD 104659
#define INF 0x3f3f3f3f
#define eps 1e-10
ifstream is("dmin.in");
ofstream os("dmin.out");
int n, m, x, y, nod;
int cnt[1501];
double cost;
double d[1501];
vector <vector <pair <int, double> > > G;
priority_queue <int, vector<int>, greater<int> > Q;
int main()
{
is >> n >> m;
G.resize(n+1);
for (int i = 1; i <= m; ++i)
{
is >> x >> y >> cost;
G[x].push_back(make_pair(y, log(cost)));
G[y].push_back(make_pair(x, log(cost)));
}
for (int i = 2; i <= n; ++i)
d[i] = INF;
Q.push(1);
cnt[1] = 1;
while ( !Q.empty() )
{
x = Q.top();
Q.pop();
for (int i = 0; i < G[x].size(); ++i)
{
nod = G[x][i].first;
cost = G[x][i].second;
if (fabs(d[x] + cost - d[nod]) < eps)
{
cnt[nod] += cnt[x];
cnt[nod] %= MOD;
}
else
if (d[nod] > d[x] + cost)
{
cnt[nod] = cnt[x];
d[nod] = d[x] + cost;
Q.push(nod);
}
}
}
for (int i = 2; i <= n; ++i)
os << cnt[i] << ' ';
is.close();
os.close();
return 0;
}