Pagini recente » Cod sursa (job #2073785) | Cod sursa (job #2327745) | Cod sursa (job #965861) | Cod sursa (job #1450130) | Cod sursa (job #2470190)
#include <fstream>
#include <vector>
#include <queue>
#define c second
#define n first
#define inf 1000000001
#define NM 100010
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
int N,d[NM],ok[NM],p,ox,oc;
vector<pair<int,int>> A[NM];
struct compare {
bool operator() (int x,int y) {
return d[x]>d[y];
} };
priority_queue <int, vector<int>, compare> q;
void scan();
void daicstra();
void print();
int main()
{
p=1;
scan();
daicstra();
print();
return 0;
}
void scan()
{
int x,y,C,useless;
cin>>N>>useless;
d[p]=0;
for(int i=1; i<=N; ++i)
if(i!=p)
d[i]=inf;
while(useless)
{
cin>>x>>y>>C;
A[x].push_back({y,C});
useless--;
}
}
void daicstra()
{
int nr=0,im=0,lg=0;
pair<int, int> el;
nr=1;
q.push(p);
ok[p]=1;
while(!q.empty())
{
im=q.top(); q.pop();
if(ok[im]==1)
continue;
ok[im]=1;
for(int i=0; i<A[im].size(); ++i)
{
ox=A[im][i].n;
oc=A[im][i].c;
lg=d[im]+oc;
if(lg<d[ox])
{
d[ox]=lg;
q.push(ox);
}
}
}
}
void print()
{
for(int i=2; i<=N; ++i, cout<<' ')
if(d[i]!=inf)
cout<<d[i];
else cout<<0;
cout<<'\n';
}