Pagini recente » Istoria paginii runda/fcgd/clasament | Cod sursa (job #1924883) | Cod sursa (job #742617) | Cod sursa (job #1373144) | Cod sursa (job #2274941)
#include <fstream>
#include <iostream>
#include <utility>
#include <vector>
#include <queue>
#define MAXN 50000
#define MAXM 100000
#define inf 1000000000
using namespace std;
priority_queue< pair<int, int> >heap;
int D[MAXN + 1], d[MAXN + 1];
vector< pair<int, int> >v[MAXN + 1];
void Dijkstra(int distanta, int start)
{
int i;
heap.push({distanta, start});
while(!heap.empty())
{
pair<int, int>nod = heap.top();
heap.pop();
pair<int, int>vecin;
for(i = 0; i < v[nod.second].size(); i++)
{
vecin.first = v[nod.second][i].second + -nod.first;
vecin.second = v[nod.second][i].first;
if(d[vecin.second] > vecin.first)
{
d[vecin.second] = vecin.first;
heap.push({-vecin.first, vecin.second});
}
}
}
}
int main()
{
int t, n, m, s, i, j, a, b, c, semafor;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
//fin >> t;
t = 1;
for(i = 1; i <= t; i++)
{
fin >> n >> m;
s = 1;
//for(j = 1; j <= n; j++)fin >> D[j];
for(j = 1; j <= m; j++)
{
fin >> a >> b >> c;
v[a].push_back({b, c});
v[b].push_back({a, c});
}
for(j = 1; j <= n; j++)d[j] = inf;
d[s] = 0;
//if(d[s] == D[s])
//{
Dijkstra(0, s);
for(j = 1; j <= n; j++)v[j].clear();
for(j = 2; j <= n; j++)fout << d[j] << " ";
fout << endl;
/* semafor = 1;
for(j = 1; j <= n && semafor == 1; j++)if(d[j] != D[j])semafor = 0;
if(semafor == 1)fout << "DA" << '\n';
else fout << "NU" << '\n';
}
else
fout << "NU" << '\n';*/
}
fin.close();
fout.close();
return 0;
}