Pagini recente » Cod sursa (job #1969699) | Cod sursa (job #1104184) | Cod sursa (job #3227090) | Cod sursa (job #1919129) | Cod sursa (job #3042007)
#include <fstream>
#include<queue>
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
const int N=5e4, INF=1e9;
int d[N+1], p[N+1], n;
priority_queue<pair<int, int>> q;
struct muchii
{
int vecin;
int cost;
};
vector <vector<muchii>> g(N+1);
void afisare()
{
for(int i=2; i<=n; i++)
{
if(d[i]==INF)
cout << 0 << " ";
else cout << d[i] << " ";
}
}
void dijkstra()
{
while(!q.empty())
{
pair <int, int> nod=q.top();
q.pop();
int x=nod.second;
nod.first=-nod.first;
for(auto y: g[x])
{
if(d[x] + y.cost < d[y.vecin])
{
d[y.vecin]= d[x] + y.cost;
p[y.vecin]=x;
q.push(make_pair(-d[y.vecin], y.vecin));
// cout << d[y.vecin] << " " << y.vecin << '\n';
}
}
}
afisare();
}
int main()
{
int m;
cin >> n >> m;
for(int i=1; i<=m; i++)
{
int x, y, c;
cin >> x >> y >> c;
g[x].push_back({y, c});
}
d[1]=0;
for(int i=2; i<=n; i++)
d[i]=INF;
for(int i=1; i<=n; i++)
p[i]=0;
q.push(make_pair(0,1));
dijkstra();
return 0;
}