Pagini recente » Cod sursa (job #655789) | Cod sursa (job #2307081) | Cod sursa (job #1413335) | Cod sursa (job #1214321) | Cod sursa (job #1481602)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#include <cmath>
#define maxN 1502
#define inf 2000000000.0
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define e 0.0000000001
#define mod 104659
using namespace std;
int n, m, i, j, sol[maxN];
double d[maxN];
bool inq[maxN];
vector < pair< int, double > > V[maxN];
struct pq
{
int x;
double c;
bool operator < (const pq & a) const
{
return c - a.c > e;
}
} el;
priority_queue < pq > H;
void read()
{
int x, y;
double c;
freopen("dmin.in", "r", stdin);
scanf("%d %d", &n, &m);
while (m --)
{
scanf("%d %d %lf", &x, &y, &c);
c = log(c);
V[x].pb(mp(y, c));
V[y].pb(mp(x, c));
}
}
void solve()
{
int x, node;
for (i = 2; i <= n; ++ i)
d[i] = inf;
el.x = 1;
H.push(el);
sol[1] = 1;
while (!H.empty())
{
el = H.top();
x = el.x;
inq[x] = 0;
H.pop();
for (i = 0; i < V[x].size(); ++ i)
{
node = V[x][i].f;
if (d[node] - d[x] - V[x][i].s > e)
{
d[node] = d[x] + V[x][i].s;
sol[node] = sol[x];
inq[node] = 1;
el.x = node;
el.c = d[node];
H.push(el);
}
else if (fabs(d[node] - d[x] - V[x][i].s) <= e)
{
sol[node] = (sol[x] + sol[node]) % mod;
if (!inq[node])
{
inq[node] = 1;
el.x = node;
el.c = d[node];
H.push(el);
}
}
}
}
}
void write()
{
freopen("dmin.out", "w", stdout);
for (i = 2; i <= n; ++ i)
printf("%d ", sol[i]);
}
int main()
{
read();
solve();
write();
return 0;
}