Pagini recente » Cod sursa (job #548367) | Cod sursa (job #579618) | Cod sursa (job #2740376) | Cod sursa (job #382353) | Cod sursa (job #2719614)
#include <iostream>
#include <fstream>
#include <forward_list>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n,m,a,b,c;
bool viz[50005];
typedef pair < int, int > ipair;
forward_list < ipair > adj[50005];
priority_queue < ipair, vector < ipair >, greater < ipair > > pq;
vector < int > dist (50005, 1000000001);
void dijkstra(int src)
{
dist[src]=0;
pq.push(make_pair(0,src));
while(!pq.empty())
{
int u=pq.top().second;
viz[u]=0;
pq.pop();
for(auto it=adj[u].begin();it!=adj[u].end();it++)
{
int v=(*it).first;
int weight=(*it).second;
if(dist[v]>dist[u]+weight)
{
dist[v]=dist[u]+weight;
if(!viz[v])
{
viz[v]=1;
pq.push(make_pair(dist[v],v));
}
}
}
}
}
int main()
{
fin >> n >> m;
for(;m;--m)
{
fin >> a >> b >> c;
adj[a].push_front(make_pair(b,c));
}
dijkstra(1);
for(int i=2;i<=n;i++)
if(dist[i]<1000000001)
fout << dist[i] << " ";
else
fout << 0 << " ";
return 0;
}