Pagini recente » Cod sursa (job #1480708) | Cod sursa (job #3133350) | Cod sursa (job #476050) | Cod sursa (job #2681151) | Cod sursa (job #2176261)
#include <bits/stdc++.h>
using namespace std;
struct arc
{
int n, c;
bool operator<(const arc& a) const
{
return c > a.c;
}
};
vector<arc> v[50005];
int viz[50005];
int rez[50005];
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int n, m;
scanf("%d%d", &n, &m);
for(int i = 0; i < m; i++)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
v[a].push_back({b, c});
}
priority_queue<arc> q;
viz[1] = 1;
for(int i = 2; i <= n; i++)
rez[i] = 0x3f3f3f3f;
for(int i = 0; i < v[1].size(); i++)
{
q.push({v[1][i].n, v[1][i].c});
rez[v[1][i].n] = v[1][i].c;
}
while(!q.empty())
{
arc a = q.top();
q.pop();
if(a.c == rez[a.n])
{
viz[a.n] = 1;
for(int i = 0; i < v[a.n].size(); i++)
{
const arc& av = v[a.n][i];
if(viz[av.n]) continue;
if(rez[av.n] > a.c + av.c)
{
rez[av.n] = a.c + av.c;
q.push({av.n, a.c + av.c});
}
}
}
}
for(int i = 2; i <= n; i++)
printf("%d ", rez[i] == 0x3f3f3f3f ? 0 : rez[i]);
return 0;
}