Pagini recente » Istoria paginii runda/test913/clasament | Cod sursa (job #342376) | Cod sursa (job #2117714) | Cod sursa (job #1710049) | Cod sursa (job #2618344)
#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 K=104659;
const double INF=7000000000;
const double eps=1e-6;
void adauga(int a,int b,double 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(fabs(d[q]+v[q][i].first-d[v[q][i].second])<eps)
{
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<<" ";
}