Pagini recente » Cod sursa (job #218786) | Cod sursa (job #2686404) | Cod sursa (job #219004) | Cod sursa (job #2499420) | Cod sursa (job #555144)
Cod sursa(job #555144)
#include<fstream>
#include<vector>
#include<algorithm>
#define nMAX 50000
#define cost first
#define poz second
#define INF 1<<30
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
int N,M;
vector<int> dist(nMAX,INF);
vector< pair<int,int> > graf[nMAX];
vector< pair<int,int> > H;
int main()
{
in>>N>>M;
for(int i=1;i<=M;i++)
{
int x,y,c;
in>>x>>y>>c;
graf[x].push_back(make_pair(c,y));
}
in.close();
dist[1]=0;
H.push_back(make_pair(0,1));
make_heap(H.begin(),H.end());
while(!H.empty())
{
pair<int,int> x=H.front();
pop_heap(H.begin(),H.end());
H.pop_back();
vector<pair<int,int> >::iterator vecin;
for(vecin=graf[x.poz].begin();vecin!=graf[x.poz].end();vecin++)
{
if(dist[vecin->poz]>dist[x.poz]+vecin->cost)
{
dist[vecin->poz]=dist[x.poz]+vecin->cost;
H.push_back(make_pair(dist[vecin->poz],vecin->poz));
push_heap(H.begin(),H.end());
}
}
}
for(int i=2;i<=N;i++)
out<<(dist[i]==INF ? 0:dist[i])<<" ";
return 0;
}