Pagini recente » Cod sursa (job #1739029) | Cod sursa (job #2439017) | Cod sursa (job #1589579) | Cod sursa (job #418685) | Cod sursa (job #2707379)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <tuple>
const int MAXN = 50001;
using namespace std;
typedef pair<int,int> pii;
typedef tuple<int,int,int> tp;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
bool viz[MAXN];
int n,m,dp[MAXN];
vector<pii>graf[MAXN];
priority_queue<tp,vector<tp>,greater<tp>>coada;
void solve(){
dp[1] = 0;
coada.push(make_tuple(0,1,1));
while(coada.size()){
auto top = coada.top();
int cost = get<0>(top);
int nod = get<1>(top);
int muchie = get<2>(top);
coada.pop();
if(viz[nod])
continue;
// cout<<"Vizitez "<<nod<<endl;
viz[nod] = true;
dp[nod] = cost;
for(auto muchie : graf[nod]){
int vecin = muchie.first,cost_muchie = muchie.second;
if(viz[vecin])
continue;
// cout<<"Nodul "<<nod<<" -> "<<vecin<<" c : "<<dp[vecin]<<endl;
coada.push(make_tuple(cost + cost_muchie,vecin,cost_muchie));
}
}
for(int i = 2; i <= n; i++)
out<<dp[i]<<" ";
}
int main()
{
in>>n>>m;
for(int i = 1; i <= m; i++){
int x,y,cost;
in>>x>>y>>cost;
graf[x].push_back({y,cost});
graf[y].push_back({x,cost});
// cout<<x<<" "<<y<<endl;
}
solve();
return 0;
}