Pagini recente » Cod sursa (job #1838356) | Cod sursa (job #1171587) | Cod sursa (job #2211270) | Cod sursa (job #1630642) | Cod sursa (job #3237178)
#include <bits/stdc++.h>
using namespace std;
ifstream in("dmin.in");
ofstream out("dmin.out");
const int nmax=1500, mod=104659, inf=1e9;
int n, m;
vector <pair<int, double>> graph[nmax+1];
vector <double> d(nmax+1, inf);//produsul minim pana la nodul i
vector <int> mr(nmax+1);//de cate ori ajunge cu minimul la nodul i
bitset <nmax+1> vis;
void dijkstra()
{
priority_queue <pair<double, int>> q;
q.push({0, 1});
d[1]=1;
mr[1]=1;
while(!q.empty())
{
int top = q.top().second;
q.pop();
if(vis[top]==0)
{
for(int i=0; i<graph[top].size(); i++)
{
int copil=graph[top][i].first;
double dist=graph[top][i].second;
if(d[copil]>dist+d[top])//nou minim
{
d[copil]=dist+d[top];
mr[copil]=mr[top];
q.push({-d[copil], copil});
}
else if(d[copil]==dist+d[top])
{
//out<<"ajunge in:"<<copil<<" din "<<top<<" cu costul "<<dist<<'\n';
mr[copil]+=mr[top];
}
}
vis[top]=1;
}
}
}
int main()
{
int x, y, z;
in>>n>>m;
for(int i=1; i<=m; i++)
{
in>>x>>y>>z;
double rez = log((double)z);
//out<<rez<<'\n';
graph[x].push_back({y, rez});
graph[y].push_back({x, rez});
}
dijkstra();
for(int i=2; i<=n; i++)
{
out<<mr[i]<<" ";
}
}