Pagini recente » Cod sursa (job #37958) | Cod sursa (job #1893761) | Cod sursa (job #2701523) | Cod sursa (job #911369) | Cod sursa (job #2172596)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define inf 0x3f3f3f3f
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
struct muchie
{
int nod,dist;
bool operator<(const muchie &altu)const
{
return dist>altu.dist;
}
};
vector <muchie> G[50005];
int n,m,d[50005],viz[50005];
void Dijkstra(int x)
{
priority_queue <muchie> q;
for(int i=1;i<=n;i++)
d[i]=inf;
d[x]=0;
muchie nou;
nou.nod=x;
nou.dist=0;
q.push(nou);
while(!q.empty())
{
nou=q.top();
q.pop();
if(!viz[nou.nod])
{
viz[nou.nod]=1;
for(int i=0;i<G[nou.nod].size();i++)
if(!viz[G[nou.nod][i].nod] && d[G[nou.nod][i].nod]>d[nou.nod]+G[nou.nod][i].dist)
{
muchie nou1;
nou1.nod=G[nou.nod][i].nod;
nou1.dist=d[nou.nod]+G[nou.nod][i].dist;
d[G[nou.nod][i].nod]=d[nou.nod]+G[nou.nod][i].dist;
q.push(nou1);
}
}
}
for(int i=2;i<=n;i++)
if(d[i]==inf) g<<0<<' ';
else g<<d[i]<<' ';
}
int main()
{
f>>n>>m;
while(m--)
{
int a,b,c;
f>>a>>b>>c;
muchie nou;
nou.nod=b;
nou.dist=c;
G[a].push_back(nou);
}
Dijkstra(1);
g.close();
return 0;
}