Pagini recente » Cod sursa (job #2943489) | Cod sursa (job #1580057) | Cod sursa (job #3277557) | Cod sursa (job #2307812) | Cod sursa (job #2465330)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
long long int n,m,x,y,val,sol[50001],cnt;
vector<pair<int,int>>lista[50001];
set<pair<int,int>>coada;
int main()
{
ios_base::sync_with_stdio(false);
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>val;
if(x==1)
cnt++;
lista[x].push_back(make_pair(y,val));
//lista[y].push_back(make_pair(x,val));
if(i<=n)
sol[i]=-1;
}
for(int i=0;i<lista[1].size();i++)
{
coada.insert(make_pair(lista[1][i].second,lista[1][i].first));
sol[lista[1][i].first]=lista[1][i].second;
}
while(!coada.empty())
{
auto it=coada.begin();
int nod=(*it).second;
int cost=(*it).first;
for(int i=0;i<lista[nod].size();i++)
if((sol[lista[nod][i].first]==-1||sol[lista[nod][i].first]>cost+lista[nod][i].second)&&lista[nod][i].first!=1)
{
sol[lista[nod][i].first]=cost+lista[nod][i].second;
coada.insert(make_pair(lista[nod][i].second+cost,lista[nod][i].first));
}
coada.erase(it);
}
for(int i=2;i<=n;i++)
{
if(sol[i]==-1)
sol[i]=0;
fout<<sol[i]<<" ";
}
return 0;
}