Pagini recente » Cod sursa (job #1820240) | Cod sursa (job #49442) | Cod sursa (job #3155794) | Cod sursa (job #1096273) | Cod sursa (job #2806408)
#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[2]>b[2];
}
};
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[1]]==0){
length[first[1]]=first[2];
Dijkstra(first[1]);
}
}
}
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;
}