Cod sursa(job #2925676)

Utilizator Luca529Taschina Luca Luca529 Data 15 octombrie 2022 21:13:37
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
unsigned long long int d[100001];
bool p[100001];
vector<pair<int, int> > x[200001];

struct C{

 bool operator()(int a, int b)
 {
    return d[a]>d[b];
 }

};

priority_queue<int, vector<int>, C> q;

void D(int a)
{q.push(a);
 p[a]=1;
 d[a]=0;

 while(q.empty()!=1)
 {a=q.top();
  q.pop();
  p[a]=0;

  for(size_t i=0;i<x[a].size();i++)
  {int v=x[a][i].first, c=x[a][i].second;
   if(d[v]>d[a]+c)
   {d[v]=d[a]+c;
    if(p[v]==0)
    {p[v]=1;
     q.push(v);
    }
   }
  }
 }
}

int main()
{   int n,m,a,b,c;
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {fin>>a>>b>>c;
     x[a].push_back(make_pair(b, c));
    // x[b].push_back(make_pair(a, c));
    }
    for(int i=1;i<=n;i++)
    d[i]=2000000000;

    D(1);

    for(int i=2;i<=n;i++)
    {if(d[i]==2000000000)fout<<0;
     else fout<<d[i];
     fout<<" ";
    }
    return 0;
}