Pagini recente » Cod sursa (job #863466) | Cod sursa (job #1118632) | Cod sursa (job #2019054) | Cod sursa (job #2036339) | Cod sursa (job #2618328)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("dmin.in");
ofstream fout("dmin.out");
int n,m,a,b,c,nrd[1501];
double d[1501];
vector<pair<double,int>>v[1501];
const int INF=70000,K=104659;
void adauga(int a,int b,int c)
{
v[a].push_back({c,b});
v[b].push_back({c,a});
}
int main()
{
priority_queue<pair<double,int>,vector<pair<double,int>>,greater<pair<double,int>>>pq;
fin>>n>>m;
fill(d+1,d+n+1,(double)INF);
d[1]=0;
for(int i=1;i<=m;i++)
{
fin>>a>>b>>c;
adauga(a,b,(double)log2(c));
}
pq.push({0,1});
nrd[1]=1;
while(!pq.empty())
{
pair<double,int>nod=pq.top();
pq.pop();
int q=nod.second;
if(d[q]!=nod.first)
continue;
for(int i=0;i<(int)v[q].size();i++)
{
if(d[q]+v[q][i].first<d[v[q][i].second])
{
d[v[q][i].second]=d[q]+v[q][i].first;
nrd[v[q][i].second]=nrd[q]%K;
pq.push({v[q][i].first+nod.first,v[q][i].second});
}
else if(d[q]+v[q][i].first==d[v[q][i].second])
{
nrd[v[q][i].second]+=nrd[q]%K;
nrd[v[q][i].second]%=K;
}
}
}
for(int i=2;i<=n;i++)
fout<<nrd[i]%K<<" ";
}