Pagini recente » Cod sursa (job #3245079) | Cod sursa (job #420812) | Cod sursa (job #1110554)
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <queue>
#include <algorithm>
#define mod 104659
#define ERR 0.0000000001
using namespace std;
vector < pair<int,double> > v[1514];
int p[1514],n,m;
double d[1514],z;// d distante minime , p numar min de drumuri
void bellman_ford (int nod)
{
int i,nodc;
queue <int> q;
q.push(nod);
while (!q.empty())
{
nod=q.front();
q.pop();
for (i=0;i<v[nod].size();i++)
{
nodc=v[nod][i].first;
if (nodc!=1)
{
if (d[nodc]==0 || (d[nodc]-d[nod]-v[nod][i].second)>ERR)
{
d[nodc]=d[nod]+v[nod][i].second;
p[nodc]=p[nod];
q.push(nodc);
}
else
{
if (fabs(d[nodc]-d[nod]-v[nod][i].second)<ERR )
{
p[nodc]=(p[nodc]+p[nod])%mod;
//q.push(nodc);
}
}
}
}
}
}
int main()
{
int i,j,x,y;
fstream f,g;
f.open("dmin.in",ios::in);
g.open("dmin.out",ios::out);
f>>n>>m;
for (i=1;i<=m;i++)
{
f>>x>>y>>z;
z=log(z);
v[x].push_back(make_pair(y,z));
v[y].push_back(make_pair(x,z));
}
p[1]=1;
bellman_ford(1);
for (i=2;i<=n;i++)
g<<p[i]<<" ";
}