Pagini recente » Cod sursa (job #2607330) | Cod sursa (job #863327) | Cod sursa (job #489126) | Cod sursa (job #800581) | Cod sursa (job #1784506)
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define INF numeric_limits<int>::max()
#define int64 long long
#define lsb(x) (-x)&(x)
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
vector<int> dijkstra(vector< vector< pair<int,int> > > adj,int start,int n)//graph, start node and number of vertices of the graph
{
priority_queue< pair<int,int> , vector< pair<int,int> > , greater< pair<int,int> > > heap;
vector<int> dist;
dist=vector<int> (n+1,INF);
dist[start]=0;
heap.push(make_pair(dist[start],start));
while(!heap.empty())
{
int v=heap.top().second;
heap.pop();
for(auto it: adj[v])
if(dist[it.first] > dist[v]+it.second)
{
dist[it.first]=dist[v]+it.second;
heap.push(make_pair(dist[it.first],it.first));
}
}
return dist;
}
int main()
{
int n,m;
vector< vector< pair<int,int> > > adj;
in>>n>>m;
adj=vector< vector< pair<int,int> > > (n+1);
for(;m;m--)
{
int x,y,z;
in>>x>>y>>z;
adj[x].push_back(make_pair(y,z));
//adj[y].push_back(make_pair(x,z));
}
vector<int> dist=dijkstra(adj,1,n);
for(int i=2;i<=n;i++)
out<<dist[i]<<' ';
out<<'\n';
return 0;
}