Pagini recente » Cod sursa (job #678742) | Cod sursa (job #3124307) | Cod sursa (job #1667306) | Cod sursa (job #1498646) | Cod sursa (job #1640630)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#include <queue>
#include <set>
using namespace std;
vector <pair<int,int>> G[50005];
int n,m,a,b,c;
const int64_t INF = 1e9;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
void dijkstra(int start)
{
vector <int64_t> dist(n+1,INF);
dist[start]=0;
int u;
set<pair<int,int> > s;
s.insert({dist[start], start});
while(!s.empty())
{
u = s.begin() -> second;
s.erase(s.begin());
for(auto p : G[u])
if(dist[p.first]>dist[u]+p.second)
{
s.erase({dist[p.first],p.first});
dist[p.first]=dist[u]+p.second;
s.insert({dist[p.first],p.first});
}
}
for(int i=2;i<=n;i++)
if(dist[i]!=INF)
g<<dist[i]<<" ";
else
g<<"0 ";
}
int main()
{
f>>n>>m;
for(int i=0; i<m; i++)
f>>a>>b>>c,G[a].push_back(make_pair(b,c));
dijkstra(1);
}