Pagini recente » Cod sursa (job #240172) | Cod sursa (job #2668082) | Cod sursa (job #623729) | Cod sursa (job #1712766) | Cod sursa (job #1640625)
#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 dfs(int nod)
{
cout<<nod<<" ";
viz[nod]=1;
for(int i=0;i<G[nod].size();i++)
if(!viz[G[nod][i]])
dfs(G[nod][i]);
}*/
void dijkstra(int start)
{
// vector <bool> mark(n+1,false);
vector <int64_t> dist(n+1,INF);
dist[start]=0;
//mark[start]=1;
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);
}