Pagini recente » Cod sursa (job #2555345) | Cod sursa (job #638164) | Cod sursa (job #902436) | Cod sursa (job #687232) | Cod sursa (job #2447150)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("dijkstra.in");
ofstream out ("dijkstra.out");
set <pair<int,int>> myset;
vector <pair<int,int>> v[50001];
int raspuns[100001], was[100002];
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());
if(was[a])
continue;
was[a] = 1;
parcurgere(a);
}
for (int i=2;i<=n;++i)
out<<raspuns[i]<<' ';
return 0;
}