Pagini recente » Cod sursa (job #2604627) | Cod sursa (job #2656165) | Cod sursa (job #3038337) | Cod sursa (job #1406115) | Cod sursa (job #2806410)
#include<bits/stdc++.h>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
struct CustomCompare{
bool operator()(const vector<int> &a, const vector<int> &b){
return a[1]>b[1];
}
};
vector<pair<int,int>> adjList[50001];
vector<int> isMarked,length;
priority_queue<vector<int>,vector<vector<int>>,CustomCompare>heap;
void Dijkstra(int x){
int i;
isMarked[x]++;
for(i=0;i<adjList[x].size();++i){
if(isMarked[adjList[x][i].first]==0){
vector<int> aux;
//aux.push_back(x);
aux.push_back(adjList[x][i].first);
aux.push_back(adjList[x][i].second+length[x]);
heap.push(aux);
aux.clear();
}
}
vector<int> first;
while(heap.size()>0){
first=heap.top();
heap.pop();
if(/*isMarked[first[0]]==1 &&*/ isMarked[first[0]]==0){
length[first[0]]=first[1];
Dijkstra(first[0]);
}
}
}
int main(){
int n,m,i,a,b,c;
f>>n>>m;
for(i=0;i<n;++i){
isMarked.push_back(0);
length.push_back(0);
}
for(i=0;i<m;++i){
f>>a>>b>>c;
adjList[a-1].push_back({b-1,c});
}
Dijkstra(0);
for(i=1;i<n;++i)
g<<length[i]<<' ';
return 0;
}