Pagini recente » Cod sursa (job #7621) | Cod sursa (job #2941249) | Cod sursa (job #584582) | Cod sursa (job #3031553) | Cod sursa (job #1901617)
#include <bits/stdc++.h>
#define NMAX 1505
#define EPS 1e-9
#define INF (int)2e9
#define MOD 104659
using namespace std;
int egal(double,double);
void read();
void bellmanford();
vector <pair <int,double> > G[NMAX];
int nrd[NMAX],inQueue[NMAX],n,m;
double dmin[NMAX];
int main(){
read();
bellmanford();
freopen("dmin.out","w",stdout);
for (int i=2;i<=n;i++){
cout<<nrd[i]%MOD<<' ';
}
}
void bellmanford(){
dmin[1]=0;
for (int i=2;i<=n;i++){
dmin[i]=INF;
}
queue <int> q;
q.push(1);
nrd[1]=1;
inQueue[1]=1;
while (!q.empty()){
int nod=q.front();
inQueue[nod]=0;
q.pop();
for (int i=0;i<G[nod].size();i++){
int vecin=G[nod][i].first;
double cost=G[nod][i].second;
if (dmin[vecin]>dmin[nod]+cost+EPS){
nrd[vecin]=nrd[nod]%MOD;
dmin[vecin]=dmin[nod]+cost;
if (!inQueue[vecin]){
q.push(vecin);
inQueue[vecin]=1;
}
}
else {
if (egal(dmin[vecin],dmin[nod]+cost)){
nrd[vecin]=((nrd[nod]%MOD)+(nrd[vecin]%MOD))%MOD;
}
}
}
}
}
void read(){
freopen("dmin.in","r",stdin);
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++){
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
double nc=log(c);
G[x].push_back(make_pair(y,nc));
G[y].push_back(make_pair(x,nc));
}
}
int egal(double x,double y){
return abs(x-y)<EPS;
}