Pagini recente » Cod sursa (job #1179759) | Cod sursa (job #899039) | Rating Cazacu Victor (vicorico) | Cod sursa (job #2557424) | Cod sursa (job #2795481)
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
int n,m;
struct elem
{
int val;
int destinatie;
bool operator <(const elem & other)const
{
return val>other.val;
}
};
vector <elem> v[50005];
priority_queue <elem> heap;
int dist[50005];
bool vizitat[50005];
const int MAX=0x3f3f3f3f;
void dijkstra()
{
elem nou;
nou.val=0;
nou.destinatie=1;
heap.push(nou);
dist[1]=0;
while(!heap.empty())
{
elem primul=heap.top();
heap.pop();
if(vizitat[primul.destinatie]==1)
{
continue;
}
vizitat[primul.destinatie]=1;
for(int i=0;i<v[primul.destinatie].size();i++)
{
int cost_curent=v[primul.destinatie][i].val;
int vecin=v[primul.destinatie][i].destinatie;
if((dist[primul.destinatie]+cost_curent)<dist[vecin])
{
dist[vecin]=dist[primul.destinatie]+cost_curent;
elem next;
next.destinatie=vecin;
next.val=dist[vecin];
heap.push(next);
}
}
}
}
int main()
{
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
fin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y,z;
fin>>x>>y>>z;
elem nou;
nou.val=z;
nou.destinatie=y;
v[x].push_back(nou);
}
memset(dist,MAX,sizeof dist);
dijkstra();
for(int i=2;i<=n;i++)
{
if(dist[i]==MAX)
fout<<0<<' ';
else
fout<<dist[i]<<' ';
}
return 0;
}