Pagini recente » Cod sursa (job #2807897) | Cod sursa (job #1898490) | Cod sursa (job #3140669) | Cod sursa (job #1373421) | Cod sursa (job #1803101)
#include <iostream>
#include <cmath>
#include <fstream>
#include <vector>
#include <queue>
#define eps 0.0000000001
#define inf 2000000001
using namespace std;
int n, m, nrdrumuri[1505];
double dmin[1505];
vector <pair <int, double> > G[1505];
struct dist
{
bool operator () (const int &x, const int &y)
{
return dmin[x]-dmin[y]>eps;
}
};
priority_queue <double, vector <int>, dist> q;
void read()
{
ifstream f("dmin.in");
f >> n >> m; double c;
for(int i=0, x, y; i<m; ++i)
{
f >> x >> y >> c;
G[x].push_back(make_pair(y,log10(c)));
G[y].push_back(make_pair(x,log10(c)));
}
f.close();
}
void dijkstra()
{
int vfmin;
for(int i=2; i<=n; ++i) dmin[i]=inf; dmin[1]=1;
q.push(1); nrdrumuri[1]=1;
while(!q.empty())
{
vfmin=q.top(); q.pop();
for(int i=0; i<G[vfmin].size(); ++i)
{
if(dmin[G[vfmin][i].first] - eps > dmin[vfmin] * G[vfmin][i].second)
{
dmin[G[vfmin][i].first] = dmin[vfmin] * G[vfmin][i].second;
nrdrumuri[G[vfmin][i].first]=nrdrumuri[vfmin];
q.push(G[vfmin][i].first);
}
else
if(abs(dmin[G[vfmin][i].first] - dmin[vfmin] * G[vfmin][i].second) <=eps )
{
nrdrumuri[G[vfmin][i].first] = (nrdrumuri[G[vfmin][i].first] + nrdrumuri[vfmin])%104659;
}
}
}
}
void out()
{
ofstream g("dmin.out");
for(int i=2; i<=n; ++i)
g << nrdrumuri[i] <<' ';
g << '\n';
g.close();
}
int main()
{
read();
dijkstra();
out();
return 0;
}