Pagini recente » Cod sursa (job #1079646) | Cod sursa (job #1880456) | Cod sursa (job #2154303) | Cod sursa (job #1546960) | Cod sursa (job #2866768)
#include <fstream>
#include <vector>
#include <queue>
#define inf 1000000100
#define Nmax 50500
#define pb push_back
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
bool ok[Nmax];
int d[Nmax], N, p;
struct compare
{
bool operator() (int x, int y)
{
return d[x]>d[y];
}
};///e pe invers asta aparent
priority_queue <int, vector<int>,compare> pq;
vector < pair<int,int> > G[Nmax];
inline void daicstra();
int main()
{
int M,x,y,z;
cin>>N>>M;
for(int i=1; i<=M; ++i)
{
cin>>x>>y>>z;
G[x].pb({y,z});
G[y].pb({x,z});
}
for(int i=1; i<=N; ++i)
d[i]=inf;
d[p=1]=0;
daicstra();
for(int i=1; i<=N; ++i)
if(i!=p)
cout<<d[i]<<' ';
cout<<'\n';
return 0;
}
inline void daicstra() ///asa se citeste pentru cei care nu stiau
{
int acc, nn, nd;
ok[p]=1;
pq.push(p);
while(!pq.empty())
{
acc=pq.top(); pq.pop();
ok[acc]=0;
for(auto it:G[acc])
{
nn=it.first;
nd=d[acc]+it.second;
if(nd<d[nn])
{
d[nn]=nd;
if(ok[nn]==0)
{
ok[nn]=1;
pq.push(nn);
}
}
}
}
}