Pagini recente » Cod sursa (job #1001268) | Cod sursa (job #2472272) | Cod sursa (job #2743206) | Monitorul de evaluare | Cod sursa (job #430950)
Cod sursa(job #430950)
#include<cstdio>
#include<fstream>
#include<set>
#include<vector>
using namespace std;
#define inf 250000001
int main()
{
ifstream fin("dijkstra.in");
freopen("dijkstra.out","w",stdout);
int n,m,x,y,c,d[50001], p[50001];
vector<int> muchii[50001];
vector<int> costuri[50001];
multiset< pair <int,int> > h;
fin>>n>>m;
for(int i=1; i<=n; ++i)
d[i]=inf;
for(int i=1; i<=m; ++i)
{
fin>>x>>y>>c;
muchii[x].push_back(y);
costuri[x].push_back(c);
if(x==1)
{
d[y]=c;
h.insert(make_pair(c,y));
}
}
p[1]=1;
while(h.size())
{
int nod=(*h.begin()).second;
int costnod=(*h.begin()).first;
h.erase(*h.begin());
p[nod]=1;
for(unsigned int i=0; i<muchii[nod].size(); ++i)
{
int vecin = muchii[nod][i];
int costvecin = costuri[nod][i];
if(d[vecin]>costnod+costvecin)
{
d[vecin]=costnod+costvecin;
if(!p[vecin]) h.insert(make_pair(d[vecin],vecin));
}
}
}
for(int i=2; i<=n; ++i)
if(d[i])
printf("%d ",d[i]);
else printf("0 ");
return 0;
}