Pagini recente » Cod sursa (job #120959) | Cod sursa (job #690128) | Cod sursa (job #571139) | Cod sursa (job #130920) | Cod sursa (job #1537377)
#include <fstream>
#include <vector>
#include <queue>
#include <deque>
#include <limits>
#include <utility>
using namespace std;
typedef pair<int, int> PII;
const int INF = numeric_limits<int>::max()>>1;
int main()
{
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n,m;
fin>>n>>m;
vector<deque<PII>> Adj(n+1);
for(int i=0;i<m;++i){
int a,b,d;
fin>>a>>b>>d;
Adj[a].push_back(PII(b,d));
}
vector<int> dist(n+1,INF);
dist[1]=0;
priority_queue<PII,deque<PII>,greater<PII>> q;
q.push(PII(0,1));
while(!q.empty()){
int v=q.top().second;
int d=q.top().first;
q.pop();
if(d==dist[v])
for(auto it=Adj[v].begin();it!=Adj[v].end();++it)
if(dist[it->first]>d+it->second){
dist[it->first]=d+it->second;
q.push(PII(dist[it->first],it->first));
}
}
for(int i=2;i<=n;++i)
if(dist[i]==INF) fout<<"0 ";
else fout<<dist[i]<<' ';
fout<<'\n';
}