Pagini recente » Cod sursa (job #1754861) | Cod sursa (job #3261690) | Cod sursa (job #2279432) | Cod sursa (job #2881524) | Cod sursa (job #2571107)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
#define nmax 50005
#define oo (1<<30)
int n,m,x,y,c;
int D[nmax];
vector < pair < int, int > > G[nmax];
struct cmp
{
bool operator() (int st,int dr)
{
return D[st]>D[dr];
}
};
priority_queue < int , vector <int > , cmp > Q;
bitset < nmax > InCoada;
void Citeste()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>c;
G[x].push_back(make_pair(y,c));
}
}
void Dijkstra(int nod_start)
{
for(int i=1;i<=n;i++)
D[i]=oo;
D[nod_start]=0;
InCoada[nod_start]=1;
Q.push(nod_start);
while(!Q.empty())
{
int nod_curent = Q.top();
Q.pop();
InCoada[nod_curent]=0;
for(int i=0;i<G[nod_curent].size();i++)
{
int vecin=G[nod_curent][i].first;
int cost=G[nod_curent][i].second;
if(D[vecin]>D[nod_curent]+cost)
{
D[vecin]=D[nod_curent]+cost;
if(InCoada[vecin]==0)
{
InCoada[vecin]=1;
Q.push(vecin);
}
}
}
}
}
void Afisare()
{
for(int i=2;i<=n;i++)
fout<<D[i]<<" ";
}
int main()
{
Citeste();
Dijkstra(1);
Afisare();
return 0;
}