Pagini recente » Cod sursa (job #1037397) | Cod sursa (job #249635) | Cod sursa (job #1549864) | Cod sursa (job #2030329) | Cod sursa (job #2224525)
#include<cstdio>
#include<vector>
#include<queue>
const int NMAX = 50000;
const int INF = (1 << 30);
int n , m;
struct arc
{
int first , second;
};
int D[NMAX + 1];
int incoada[NMAX + 1];
struct helper
{
bool operator()(int x , int y)
{
return D[x] > D[y];
}
};
std :: vector<arc>v[NMAX + 1];
std :: priority_queue<int , std :: vector<int> ,helper> coada;
void dijkstra(int start)
{
for(int i = 1; i <= n ; i ++)
D[i] = INF;
D[start] = 0;
coada.push(start);
incoada[start] = 1;
while(!coada.empty())
{
int nodCurent = coada.top();
coada.pop();
incoada[nodCurent] = false;
for(size_t i = 0; i < v[nodCurent].size(); i++)
{
int Vecin = v[nodCurent][i].first;
int Cost = v[nodCurent][i].second;
if(D[nodCurent] + Cost < D[Vecin])
{
D[Vecin] = D[nodCurent] + Cost;
if(incoada[Vecin] == false)
{
coada.push(Vecin);
incoada[Vecin] = true;
}
}
}
}
}
int main()
{
int x , y , c;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i = 1; i <= m ; i ++)
{
scanf("%d%d%d",&x,&y,&c);
v[x].push_back({y , c});
}
dijkstra(1);
for(int i = 2 ; i <= n ; i ++)
printf("%d ",D[i]);
return 0;
}