Pagini recente » Cod sursa (job #609676) | Cod sursa (job #1836916) | Cod sursa (job #3141486) | Cod sursa (job #2491115) | Cod sursa (job #2817292)
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
#define ll long long
using namespace std;
ifstream cin ("dijkstra.in");
ofstream cout ("dijkstra.out");
ll n,m,i,a,b,c;
struct element
{
ll mini=INT_MAX;
bool seen;
vector <pair<ll,ll> > sz;
};
//vector <element> x;
struct q
{
ll len,to;
};
priority_queue <q> que;
bool operator< (const q &a, const q &b)
{
return a.len>b.len;
}
q act;
int main()
{
cin>>n>>m;
vector <element> x(n+1);
for (i=1;i<=m;++i)
{
cin>>a>>b>>c;
x[a].sz.push_back({b,c});
}
que.push({0,1});
// x[1].seen=true;
while (!que.empty())
{
act=que.top();
while (!que.empty()&&x[act.to].seen)
{
que.pop();
if (!que.empty()) act=que.top();
}
if (que.empty()) break;
que.pop();
x[act.to].seen=true;
x[act.to].mini=act.len;
for (auto &e:x[act.to].sz)
{
if (!x[e.first].seen)
{
if ((act.len+e.second)<x[e.first].mini)
{
x[e.first].mini=act.len+e.second;
que.push({act.len+e.second,e.first});
}
}
}
}
for (i=2;i<=n;++i) cout<<x[i].mini<<" ";
return 0;
}