Pagini recente » Cod sursa (job #865110) | Cod sursa (job #3255271) | Cod sursa (job #1273996) | Cod sursa (job #1502713) | Cod sursa (job #1232664)
#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
#include <cmath>
#define MMAX 2501
#define NMAX 1501
#define x first
#define y second
#define eps 1e-10
#define inf 1e9
#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];
bool use[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);
use[1]=1;
nr[1]=1;
int x;
while(!q.empty())
{
x=q.top();
q.pop();
use[x]=1;
for(int i=0; i<v[x].size(); ++i)
{
pair<double, int> k=v[x][i];
if(!use[k.y])
{
if( fabs(dmin[k.y]-dmin[x]+k.x) < eps )
nr[x]+=nr[k.y];
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;
//while(use[q.top()] && !q.empty())
// q.pop();
//use[k.y]=1;
}
}
}
}
int main()
{
read();
dijkstra();
for(int i=2; i<=n; i++)
printf("%i ", nr[i]);
printf("\n");
return 0;
}