Pagini recente » Cod sursa (job #2314018) | Cod sursa (job #2562055) | Cod sursa (job #2270123) | Cod sursa (job #971375) | Cod sursa (job #2447138)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream in ("dijkstra.in");
ofstream out ("dijkstra.out");
set <pair<int,int>> myset;
vector <pair<int,int>> v[100001];
int raspuns[100001];
bool vizitat[100001];
void parcurgere(int nod)
{
int cost;
vizitat[nod]=1;
for (int i=0;i<v[nod].size();++i)
{
if (!vizitat[v[nod][i].first])
{
vizitat[v[nod][i].first]=1;
myset.insert(make_pair(v[nod][i].second+raspuns[nod],v[nod][i].first));
raspuns[v[nod][i].first]=v[nod][i].second+raspuns[nod];
}
else
{
if (v[nod][i].second+raspuns[nod]<raspuns[v[nod][i].first])
{
myset.erase(make_pair(raspuns[v[nod][i].first],v[nod][i].first));
raspuns[v[nod][i].first]=v[nod][i].second+raspuns[nod];
myset.insert(make_pair(v[nod][i].second+raspuns[nod],v[nod][i].first));
}
}
}
}
main ()
{
int n,m;
in>>n>>m;
for (int i=1;i<=m;++i)
{
int a,b,c;
in>>a>>b>>c;
v[a].push_back(make_pair(b,c));
v[b].push_back(make_pair(a,c));
}
myset.insert(make_pair(0,1));
while (!myset.empty())
{
int a=(*myset.begin()).second;
myset.erase(myset.begin());
parcurgere(a);
}
for (int i=2;i<=n;++i)
out<<raspuns[i]<<' ';
return 0;
}