Pagini recente » Cod sursa (job #442234) | Cod sursa (job #2161207) | Cod sursa (job #2973680) | Cod sursa (job #2351593) | Cod sursa (job #2925658)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
unsigned long long int d[100001];
bool p[100001];
vector<pair<int, int> > x[200001];
struct C{
bool operator()(int a, int b)
{
return d[a]>d[b];
}
};
priority_queue<int, vector<int>, C> q;
void D(int a)
{q.push(a);
p[a]=1;
d[a]=0;
while(q.empty()!=1)
{a=q.top();
q.pop();
p[a]=0;
for(size_t i=0;i<x[a].size();i++)
{int v=x[a][i].first, c=x[a][i].second;
if(d[v]>d[a]+c)
{d[v]=d[a]+c;
if(p[v]==0)
{p[v]=1;
q.push(v);
}
}
}
}
}
int main()
{ int n,m,a,b,c;
fin>>n>>m;
for(int i=1;i<=m;i++)
{fin>>a>>b>>c;
x[a].push_back(make_pair(b, c));
// x[b].push_back(make_pair(a, c));
}
for(int i=1;i<=n;i++)
d[i]=2000000000;
D(1);
for(int i=2;i<=n;i++)
{if(d[i]==2000000000)fout<<0;
else fout<<d[i];
fout<<" ";
}
return 0;
}