Pagini recente » Cod sursa (job #2047314) | Cod sursa (job #259054) | Cod sursa (job #2233499) | Cod sursa (job #130895) | Cod sursa (job #2465332)
#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()
{
memset(sol,-1,sizeof(sol));
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));
}
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)
{
if(sol[lista[nod][i].first]>cost+lista[nod][i].second)
coada.erase(coada.find(make_pair(sol[lista[nod][i].first],lista[nod][i].first)));
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;
}