Pagini recente » Istoria paginii runda/concurs_infoarena | Cod sursa (job #2234931) | Cod sursa (job #769064) | Istoria paginii runda/a2cos12min2003/clasament | Cod sursa (job #2455119)
#include <queue>
#include <vector>
#include <utility>
#include <fstream>
#define INF 2e9
#define MAX 50000
using namespace std;
typedef pair<int, int>pi;
int dist[MAX];
bool marked[MAX];
priority_queue< pi,vector<pi>,greater<pi> > pq;
vector<pi> graf[MAX];
int main()
{
int n, m, v, u, cost, i;
pair<int, int>nod;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
fin >> n >> m;
for(i = 0; i < m; i++)
{
fin >> v >> u >> cost;
graf[v].push_back({u, cost});
}
for(i = 2; i <= n; i++)
dist[i] = INF;
pq.push({0, 1});
while(!pq.empty())
{
nod = pq.top();
pq.pop();
marked[nod.second] = true;
for(auto neighbour : graf[nod.second])
{
if(!marked[neighbour.first])
{
if(dist[neighbour.first] > dist[nod.second] + neighbour.second)
{
dist[neighbour.first] = dist[nod.second] + neighbour.second;
pq.push({dist[neighbour.first], neighbour.first});
};
}
}
}
for(i = 2; i <= n; i++)
if(dist[i] == INF)fout << 0 << " ";
else fout << dist[i] << " ";
fin.close();
fout.close();
return 0;
}