Pagini recente » Monitorul de evaluare | Autentificare | Cod sursa (job #2016427) | rosiimici | Cod sursa (job #2968051)
#include <fstream>
#include<vector>
#include<queue>
#include<climits>
#define INF INT_MAX
#define NMAX 50001
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
vector<pair<int,int> >v[NMAX];
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq;
int n,m,x,y,cost;
int d[NMAX];
bool viz[NMAX];
void dijkstra()
{
d[1]=1;
pq.push({1,1});
while(!pq.empty())
{
int nod=pq.top().second;
int cost=pq.top().first;
pq.pop();
if(viz[nod]==1)
continue;
viz[nod]=1;
for(int i=0;i<v[nod].size();i++)
{
int nod1=v[nod][i].first;
int cost1=v[nod][i].second;
if(d[nod1]>cost1+cost)
{
d[nod1]=cost1+cost;
pq.push({d[nod1],nod1});
}
}
}
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>cost;
v[x].push_back({y,cost});
}
for(int i=2;i<=n;i++)
d[i]=INF;
dijkstra();
for(int i=2;i<=n;i++)
{
if(d[i]==INF)
fout<<0<<" ";
else
fout<<d[i]-1<<" ";
}
return 0;
}