Pagini recente » Cod sursa (job #2605472) | Cod sursa (job #1346293) | Cod sursa (job #1280657) | Cod sursa (job #678674) | Cod sursa (job #1112152)
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cmath>
#define E 0.0000000001
#define MOD 104659
#define Nmax 1505
#define MAX 2000000000
using namespace std;
vector<pair<int,double> >G[Nmax];
vector<pair<int,double> >::iterator it;
queue <int> C;
int n;
bool viz[Nmax];
int NR[Nmax];
double dmin[Nmax];
void reading(int &n)
{
int k,m,x,y;
freopen("dmin.in","r",stdin);
freopen("dmin.out","w",stdout);
scanf("%d %d",&n,&m);
for(k=1;k<=m;++k)
{
double cost;
scanf("%d %d %lf",&x,&y,&cost);
cost=log(cost);
G[x].push_back(make_pair(y,cost));
G[y].push_back(make_pair(x,cost));
}
}
void disjktra()
{
int i,x,y;
for(i=1;i<=n;++i) {dmin[i]=MAX;NR[i]=0;viz[i]=0;}
C.push(1);dmin[1]=0;NR[1]=1;viz[1]=1;
while(!C.empty())
{
x=C.front();C.pop();viz[x]=0;
for(it=G[x].begin();it!=G[x].end();++it)
{
double cost=it->second;
y=it->first;
if (E<dmin[y]-dmin[x]-cost)
{
dmin[y]=dmin[x]+cost;
NR[y]=NR[x];
if (!viz[y]) {C.push(y);viz[y]=1;}
}
else
{
if (E>fabs(dmin[x]+cost-dmin[y]))
{
NR[y]=NR[y]+NR[x];
if (NR[y]>=MOD) NR[y]-=MOD;
}
}
}
}
}
void writte()
{
int i;
for(i=2;i<=n;++i) printf("%d ",NR[i]);
}
int main()
{
reading(n);
disjktra();
writte();
return 0;
}