Pagini recente » Cod sursa (job #3330185) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #3343783) | Cod sursa (job #1328508)
#include <bits/stdc++.h>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
vector< vector< pair<int,int> > > a;
struct compare
{
bool operator()(const pair<int,int>& l, const pair<int,int>& r)
{
return l.first > r.first;
}
};
priority_queue< pair<int,int> , vector< pair<int,int> > , compare > q;
vector<int> d,pre;
void dijkstra(int x)
{
q.push({0,x});
d[x]=pre[x]=0;
while(!q.empty())
{
pair<int,int> k=q.top();
int x=k.second;
q.pop();
for(auto i: a[x])
if(d[x] + i.second < d[i.first])
{
d[i.first]=d[x]+i.second;
pre[i.first]=x;q.push({d[i.first],i.first});
}
}
}
int main()
{
int n,m,x,y,z;
in>>n>>m;
a=vector< vector< pair<int,int> > >(n+1);
d=vector<int>(n+1,numeric_limits<int>::max());
pre=vector<int>(n+1);
for(;m;m--)
{
in>>x>>y>>z;
a[x].push_back({y,z});
}
dijkstra(1);
for(int i=2;i<=n;i++)
out<<(d[i]==numeric_limits<int>::max() ? 0 : d[i])<<' ';
return 0;
}