Pagini recente » Cod sursa (job #3299538) | Cod sursa (job #948147) | Cod sursa (job #441455) | Cod sursa (job #3296348) | Cod sursa (job #1771708)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <iterator>
#include <functional>
#include <climits>
#include <cmath>
#define nmax 1510
#define MOD 104659
using namespace std;
ifstream f("dmin.in");
ofstream g("dmin.out");
vector <pair<double,int> > adj[nmax];
int n,m;
int best[nmax];
double err=1e-9,INF=1e+37;
struct cmp {
bool operator()(pair<double,int> a,pair<double,int> b){
return a.first>b.first;
}
};
priority_queue <pair<double,int>,vector<pair<double,int> >,cmp> pb;
double dist[nmax];
void dijktras(int v)
{
int u;
double cost,b;
dist[v]=0;
pb.push(make_pair(0,v));
while(!pb.empty())
{
v=pb.top().second;
b=pb.top().first;
pb.pop();
for(vector<pair<double,int> >::iterator it=adj[v].begin();it!=adj[v].end();it++)
{
u=it->second;
cost=it->first;
b=cost+dist[v];
if(fabs(dist[u]-b)<err){
best[u]+=best[v];
best[u]=best[u]%MOD;
}
else
if(dist[u]-err>=dist[v]+cost)
{
best[u]=best[v];
dist[u]=dist[v]+cost;
pb.push(make_pair(dist[u],u));
}
}
}
}
int main()
{
f >> n >> m;
for(int i=0;i<m;i++)
{
int x,y,c;
f >> x >> y >> c;
adj[x].push_back(make_pair(log(c),y));
adj[y].push_back(make_pair(log(c),x));
}
for(int i=1;i<=n;i++){
dist[i]=INF;
}
best[1]=1;
dijktras(1);
for(int i=2;i<=n;i++)
g << best[i] << " ";
return 0;
}