Pagini recente » Cod sursa (job #675472) | Cod sursa (job #2449378) | Cod sursa (job #1274298) | Cod sursa (job #146266) | Cod sursa (job #1901672)
#include <fstream>
#include <queue>
#include <vector>
#define NMAX 1502
#include <cmath>
#define INF 1000001
#define eps 1e-8
#define MOD 104659
using namespace std;
ifstream f("dmin.in");
ofstream g("dmin.out");
void citire();
void bellmanFord();
inline double modul(double x)
{
if(x<0) return -x;
return x;
}
struct muchie
{
int nod;
double cost;
} aux;
vector < muchie > G[NMAX];
queue <int> Q;
double z;
int n, m, i, nrd[NMAX];
double dmin[NMAX];
bool viz[NMAX];
int main()
{
citire();
bellmanFord();
for(i=2;i<=n;++i) g<<nrd[i]<<' ';
return 0;
}
void bellmanFord()
{
int x, vecin;
double cost;
int i;
Q.push(1);
viz[1]=1;
while (!Q.empty())
{
x=Q.front();
Q.pop();
for (i=0;i<G[x].size();i++)
{
vecin=G[x][i].nod;
cost=G[x][i].cost;
if(dmin[vecin]-eps>dmin[x]+cost)
{
dmin[vecin]=dmin[x]+cost;
nrd[vecin]=nrd[x];
if(!viz[vecin]) Q.push(vecin), viz[vecin]=1;
}
else if(modul(dmin[vecin]-dmin[x]-cost)<=eps)
{
nrd[vecin]=(nrd[vecin]+nrd[x])%MOD;
}
}
}
}
void citire()
{
int x, y;
double z;
double cost;
f>>n>>m;
for (i=1;i<=m;i++)
{
f>>x>>y>>cost;
z=log(cost);
aux.nod=y;
aux.cost=z;
G[x].push_back(aux);
aux.nod=x;
G[y].push_back(aux);
}
//initializare
nrd[1]=1;
for (i=2;i<=n;i++)
dmin[i]=INF;
}