Pagini recente » Cod sursa (job #2192947) | Cod sursa (job #2653433) | Cod sursa (job #2868312) | Cod sursa (job #2143507) | Cod sursa (job #859269)
Cod sursa(job #859269)
#include <fstream>
#include <cmath>
#include <vector>
#include <queue>
#include <bitset>
#define Nmax 1505
#define nod first
#define cost second
#define eps 1e-9
using namespace std;
ifstream f("dmin.in"); ofstream g("dmin.out");
const int inf = 2000000000, MOD = 104659;
int N, M, nrdr[Nmax];
double Dist[Nmax];
vector < pair <int, double> > L[Nmax];
queue <int> Q;
bitset <Nmax> viz;
void parc()
{ Q.push(1); nrdr[1]=1; viz[1]=1;
while(!Q.empty())
{ int a=Q.front(); Q.pop(); viz[a]=0;
vector< pair <int, double> >::iterator it=L[a].begin(), sf=L[a].end();
for(; it!=sf; ++it)
{ int b=(*it).nod;
if(Dist[a] + (*it).cost + eps < Dist[b])
{ Dist[b] = Dist[a] + (*it).cost;
nrdr[b] = nrdr[a];
if(!viz[b]) Q.push(b), viz[b]=1;
}
else
if(fabs(Dist[a] + (*it).cost - Dist[b]) < eps)
{ nrdr[b] += nrdr[a];
if(nrdr[b] >= MOD) nrdr[b] -= MOD;
}
}
}
}
int main()
{ f>>N>>M;
for(int i=2; i<=N; ++i) Dist[i]=inf;
while(M--)
{ int x,y;
double d;
f>>x>>y>>d;
double c=log(d);
L[x].push_back(make_pair(y,c));
L[y].push_back(make_pair(x,c));
}
parc();
for(int i=2; i<=N; ++i) g<<nrdr[i]<<' ';
g<<'\n'; g.close();
return 0;
}