Pagini recente » Cod sursa (job #588759) | Cod sursa (job #1855165) | Cod sursa (job #1903246) | Cod sursa (job #2296754) | Cod sursa (job #2711482)
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
int sum, nrsol, a[250005], b[250005], c[250005], cos[250005];
vector <int> e[50005];
priority_queue <pair <int, int>, vector<pair <int, int> >, greater<pair <int, int> > > edges;
bitset <50005> added;
int main()
{
int n, m;
cin >> n >> m;
for(int i = 1; i <= m; ++i)
{
cin >> a[i] >> b[i] >> c[i];
e[a[i]].push_back(i);
e[b[i]].push_back(i);
}
added[1] = true;
for(auto it = e[1].begin(); it != e[1].end(); ++it)
{
edges.push({c[*it], *it});
}
while(!edges.empty())
{
int i = edges.top().second;
if(added[a[i]] == true && added[b[i]] == true)
{
edges.pop();
continue;
}
int x;
if(added[a[i]] == false)
x = a[i];
else
x = b[i];
added[x] = true;
cos[x] = edges.top().first;
edges.pop();
for(auto it = e[x].begin(); it != e[x].end(); ++it)
{
if(added[a[*it]] == true && added[b[*it]] == true)
continue;
edges.push({c[*it] + cos[x], *it});
}
}
for(int i = 2; i <= n; ++i)
{
cout << cos[i] << ' ';
}
return 0;
}