Pagini recente » Cod sursa (job #3284736) | Cod sursa (job #1245357) | Istoria paginii documentatie/concursuri-virtuale | Cod sursa (job #2963631) | Cod sursa (job #3039631)
#include<iostream>
#include<fstream>
#include<set>
#include<algorithm>
#include<vector>
#define inf 1000000001
using namespace std;
int i, m ;
struct dublu
{
int dist;
int nod;
bool operator<(const dublu & a) const
{
return dist < a.dist;
}
};
vector<dublu> vec[100000];
int d[100000], proces[100000], n, p, x, y, cost;
void dijkstra(int v)
{
fill(d + 1, d + n + 1, inf);
d[v] = 0;
int u;
set<dublu > s;
s.insert({d[v], v});
while(!s.empty())
{
dublu x = *(s.begin());
u = x.nod;
s.erase(s.begin());
int l = vec[u].size();
for(int j = 0; j < l; j++ )
{
int vecin = vec[u][j].nod;
auto no = s.find({d[vecin], vecin});
if(no != s.end())
s.erase(no);
d[vecin] = min(d[vecin], d[u] + vec[u][j].dist);
s.insert({d[vecin], vecin});
}
}
}
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
cin >> n >> m;
while(cin >> x >> y >> cost)
{
vec[x].push_back({cost, y});
}
dijkstra(1);
for(int i = 2; i <= n; i++)
{
if(d[i] == inf)
cout << 0 << " ";
else
cout << d[i] << " ";
}
return 0;
}