Pagini recente » Cod sursa (job #1534022) | Cod sursa (job #1728863) | Cod sursa (job #2694039) | Cod sursa (job #27536) | Cod sursa (job #1232671)
#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
#include <cmath>
#define MMAX 2503
#define NMAX 1503
#define x first
#define y second
#define eps 1e-9
#define inf 1<<30
#define mp make_pair
#define pb push_back
#define mod 104659
using namespace std;
int n, m, nr[NMAX];
double dmin[NMAX];
vector <pair<double, int> > v[NMAX];
class compare
{
public:
bool operator()(const int &a, const int &b)
{
if(dmin[a]>dmin[b])
return true;
return false;
}
};
priority_queue <int, vector<int>, compare> q;
void read()
{
freopen("dmin.in", "r", stdin);
freopen("dmin.out", "w", stdout);
int a, b, c;
double cc;
scanf("%i %i", &n, &m);
for(int i=1; i<=m; i++)
{
scanf("%i %i %i", &a, &b, &c);
cc=log(c);
v[a].pb(mp(cc,b));
v[b].pb(mp(cc,a));
}
}
void dijkstra()
{
for(int i=2; i<=n; i++)
dmin[i]=inf;
q.push(1);
nr[1]=1;
int x;
while(!q.empty())
{
x=q.top();
q.pop();
for(int i=0; i<v[x].size(); ++i)
{
pair<double, int> k=v[x][i];
if( fabs(dmin[k.y]-dmin[x]-k.x) < eps )
nr[k.y]+=nr[x];
else if(dmin[k.y]>dmin[x]+k.x)
{
nr[k.y]=nr[x];
dmin[k.y]=dmin[x]+k.x;
q.push(k.y);
}
if(nr[k.y]>mod) nr[k.y]-=mod;
if(nr[x]>mod) nr[x]-=mod;
}
}
}
int main()
{
read();
dijkstra();
for(int i=2; i<=n; i++)
printf("%i ", nr[i]);
printf("\n");
return 0;
}