Pagini recente » Cod sursa (job #223689) | Cod sursa (job #2040425) | Cod sursa (job #1640463) | Rating Marpozan Daniel (Marpozan_Daniel) | Cod sursa (job #1907598)
#include <fstream>
#include <vector>
#include <cmath>
#include <queue>
#define INF 1000000
#define MOD 104659
#define EPS 0.0000000001
using namespace std;
ifstream fin("dmin.in");
ofstream fout("dmin.out");
struct data{
int vecin;
double cost;
};
vector <data> vec[1501];
queue <int> q;
double dmin[1501];
int nrd[1501],in[1501];
int main()
{
int n,m,i;
int x,y,c;
data a;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y>>c;
a.vecin=y;a.cost=log(c);
vec[x].push_back(a);
a.vecin=x;
vec[y].push_back(a);
}
nrd[1]=1;
for(i=2;i<=n;i++)
{
dmin[i]=INF;
nrd[i]=0;
}
q.push(1);in[1]=1;
while(!q.empty())
{
x=q.front();q.pop();in[x]=0;
for(i=0;i<vec[x].size();i++)
{
int vecin=vec[x][i].vecin;
double cst=vec[x][i].cost;
double del=dmin[vecin]-dmin[x];
del=del-cst;
if(del<0)
del=-del;
if(del<EPS)
nrd[vecin]=(nrd[vecin]+nrd[x])%MOD;
else
if(dmin[vecin]>dmin[x]+cst)
{
dmin[vecin]=dmin[x]+cst;
nrd[vecin]=nrd[x];
if(in[vecin]==0){
in[vecin]=1;
q.push(vecin);
}
}
}
}
for(i=2;i<=n;i++)
fout<<nrd[i]%MOD<<' ';
return 0;
}