Pagini recente » Cod sursa (job #1585574) | Cod sursa (job #1406788) | Cod sursa (job #2956163) | Cod sursa (job #3214324) | Cod sursa (job #1661871)
#include <fstream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <iomanip>
#define NMax 1505
#define INF 0x3f3f3f3f
#define mod 104659
using namespace std;
int dist[NMax],ANS[NMax],viz[NMax];
int n,m,x,y,c;
vector<pair<int,double> > G[NMax];
queue<int> q;
void bf(){
memset(dist,INF,sizeof(dist));
dist[1] = 1;
ANS[1] = 1;
q.push(1);
viz[1] = 1;
while(!q.empty()){
int nod = q.front();
q.pop();
for(int i = 0; i < G[nod].size(); ++i){
if(dist[G[nod][i].first] == dist[nod] * G[nod][i].second && G[nod][i].first != 1){
ANS[G[nod][i].first] = (ANS[G[nod][i].first] + ANS[nod] % mod) % mod;
}
if(dist[G[nod][i].first] > dist[nod] * G[nod][i].second){
dist[G[nod][i].first] = dist[nod] * G[nod][i].second;
ANS[G[nod][i].first] = ANS[nod];
if(viz[G[nod][i].first] == 0){
q.push(G[nod][i].first);
viz[G[nod][i].first] = 1;
}
}
}
}
ofstream g("dmin.out");
for(int i = 2; i <= n; ++i){
g << ANS[i] % mod <<' ';
}
g.close();
}
int main()
{
ifstream f("dmin.in");
f >> n >> m;
for(int i = 1; i <= m; ++i){
f >> x >> y >> c;
G[x].push_back(make_pair(y,log(c)));
G[y].push_back(make_pair(x,log(c)));
}
bf();
f.close();
return 0;
}