Pagini recente » Cod sursa (job #263555) | Cod sursa (job #2476139) | Cod sursa (job #1187369) | Cod sursa (job #1083120) | Cod sursa (job #2807482)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
#define Nmax 50008
int n,m;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
#define inf 200004
void dijkstra(vector< pair<int,int> > node_with_cost[Nmax],int source)
{
vector<int> dist(n+1,inf);
vector<bool> visited(n+1,false);
priority_queue<pair<int,int>,
vector<pair<int,int>>,
greater< pair<int,int> > > pq;
dist[source]=0;
pq.push(make_pair(0,source));
while(!pq.empty())
{
int poz=pq.top().first;
int u=pq.top().second;
pq.pop();
if(visited[u]) continue;
visited[u]=false;
for(auto i=node_with_cost[u].begin();
i!=node_with_cost[u].end();++i)
{
int v=(*i).first;
int weight = (*i).second;
if(dist[v]>dist[u]+weight)
{
dist[v]=dist[u]+weight;
pq.push(make_pair(dist[v],v));
}
}
}
for(int i=2;i<=n;i++)
if(dist[i]!=inf)
g<<dist[i]<<" ";
else g<<0<<" ";
}
int main()
{
vector< pair<int,int> > node_with_cost[Nmax];
f>>n>>m;
for(int i=0;i<m;i++)
{
int x,y,cost;
f>>x>>y>>cost;
node_with_cost[x].push_back(make_pair(y,cost));
}
dijkstra(node_with_cost,1);
return 0;
}