Pagini recente » Cod sursa (job #399100) | Cod sursa (job #2245586) | Cod sursa (job #1438794) | Cod sursa (job #900603) | Cod sursa (job #2554130)
#include <bits/stdc++.h>
#define INF 1000000000
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int N,M;
int Cost[50001];
unsigned Grad[50001];
bool Viz[50001];
vector< pair<int,int> >Ad[50001];
void citire()
{
int x,y,z;
fin>>N>>M;
for(int i=1;i<=N;i++)
Cost[i]=INF;
for(int i=1;i<=M;i++)
{
fin>>x>>y>>z;
Ad[x].push_back({y,z});
Grad[x]++;
}
}
void dijkstra(int x)
{
priority_queue< pair<int,int> >Q;
int P;
Cost[x]=0;
Viz[x]=1;
Q.push({0,x});
while(!Q.empty())
{
P=Q.top().second;
Q.pop();
for(unsigned i=0;i<Grad[P];i++)
if(!Viz[Ad[P][i].first])
if(Cost[Ad[P][i].first]>Cost[P]+Ad[P][i].second)
{
Viz[Ad[P][i].first]=1;
Cost[Ad[P][i].first]=Cost[P]+Ad[P][i].second;
Q.push({-Cost[Ad[P][i].first],Ad[P][i].first});
}
}
}
void afisare()
{
for(int i=2;i<=N;i++)
if(Cost[i]==INF)
fout<<0<<" ";
else
fout<<Cost[i]<<" ";
}
int main()
{
citire();
dijkstra(1);
afisare();
return 0;
}