Pagini recente » Cod sursa (job #2448968) | Statistici Costin Tudor (tcostin) | Rating cosmin (mara123) | Diferente pentru flux-si-cuplaj intre reviziile 30 si 29 | Cod sursa (job #2470179)
#include <fstream>
#include <vector>
#include <queue>
#define c second
#define n first
#define inf 2000000000
#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(cin>>x>>y>>C)
A[x].push_back({y,C});
}
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();
ok[im]=0;
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;
if(ok[ox]==0)
{
ok[ox]=1;
q.push(ox);
}
}
}
}
}
void print()
{
for(int i=2; i<=N; ++i, cout<<' ')
if(d[i]!=inf)
cout<<d[i];
else cout<<-1;
cout<<'\n';
}