Pagini recente » Cod sursa (job #264450) | Cod sursa (job #946880) | Cod sursa (job #2666976) | Cod sursa (job #1617043) | Cod sursa (job #2679714)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int Nmax=50005;
const int Inf=(1<<30);
int n, m;
int d[Nmax];
bool viz[Nmax];
vector<pair<int, int>>G[Nmax];
struct comp
{
bool operator()(int a, int b)
{
return d[a]>d[b];
}
};
priority_queue<int, vector<int>, comp> Q;
void citire()
{
fin>>n>>m;
while(m--)
{
int x, y, c;
fin>>x>>y>>c;
G[x].push_back(make_pair(y, c));
}
}
void dijkstra(int start)
{
for(int i=1; i<=n; i++)
d[i]=Inf;
d[start]=0;
Q.push(start);
viz[start]=true;
while(!Q.empty())
{
int nod=Q.top();
Q.pop();
viz[nod]=false;
for(auto& i:G[nod])
{
int vecin=i.first;
int cost=i.second;
if(d[nod]+cost<d[vecin])
{
d[vecin]=d[nod]+cost;
if(viz[vecin]==false)
{
Q.push(vecin);
viz[vecin]=true;
}
}
}
}
}
void afisare()
{
for(int i=2; i<=n; i++)
if(d[i]!=Inf)
fout<<d[i]<<" ";
else fout<<"0 ";
}
int main()
{
citire();
dijkstra(1);
afisare();
}