Pagini recente » Cod sursa (job #655641) | Cod sursa (job #3221286)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
int n,m,x,y,z;
vector<pair<int,int>> v[50001];//vector de nod si lugime
int d[50001];//vecotor de directie
int viz[50001];//vector pt. verificare daca a fost "vizitat"
const int inf=1<<30;//constanta pt. initializarea vectorului de distante (2 la puterea 30)
class cmp{
public:
bool operator () (int x,int y)
{
return d[x] > d[y];
}
}a;
priority_queue<int, vector<int>, cmp> q;
void dijkstra()
{
for (int i=1;i<=n;i++)
d[i]=inf;//initializarea
d[1]=0;
q.push(1);
while (!q.empty())
{
int x=q.top();
q.pop();
for (auto u:v[x])
{
if (d[x]+u.second<d[u.first])
{
d[u.first]=d[x]+u.second;
if (viz[u.first]==0)
{
q.push(u.first);
viz[u.first]=1;
}
}
}
}
}
int main()
{
fin >> n >> m;
while (fin >> x >> y >> z)
v[x].push_back({y,z});
dijkstra();
for (int i=2;i<=n;i++)
{
if (d[i]==inf)
fout << 0 << " ";
else
fout << d[i] << " ";
}
return 0;
}