Pagini recente » Cod sursa (job #2363902) | Monitorul de evaluare | Cod sursa (job #3350221) | Cod sursa (job #2298386) | Cod sursa (job #2853487)
#include <fstream>
#include <vector>
#include <queue>
#include <string.h>
using namespace std;
#define lim 50100
struct node
{
int direction;
int cost;
};
vector<node> G[lim];
///node,cost
priority_queue<node> q;
int N,M;
int rezultat[lim];
bool vizitat[lim];
void djikstra()
{
rezultat[1] = 0;
q.push({1, 0});
while (!q.empty())
{
/// use node as currentNode, direction being x not y in this case
node top = q.top();
q.pop();
if(!vizitat[top.direction])
{
vizitat[top.direction] = true;
for(auto nod : G[top.direction])
{
if(rezultat[nod.direction] > rezultat[top.direction] + nod.cost )
{
rezultat[nod.direction] = rezultat[top.direction] + nod.cost;
q.push({nod.direction,-rezultat[nod.direction]});
}
}
}
}
}
int main() {
ifstream fin("djikstra.in");
ofstream fout("djikstra.out");
int source, destination, cost;
int count = 0;
fin >> N >> M;
for (int i = 1; i <= N; i++) {
fin >> source >> destination >> cost;
G[source].push_back({destination, cost});
}
for (int i = 1; i <= N; i++)
rezultat[i] = INT_FAST16_MAX;
djikstra();
for(int i = 2 ; i <= N ; i++)
{
if(rezultat[i] == INT_FAST16_MAX)
fout<<0<<' ';
fout<<rezultat[i]<<' ';
}
fin.close();
fout.close();
return 0;
}