Pagini recente » Cod sursa (job #829401) | Cod sursa (job #2442415) | Cod sursa (job #501239) | Cod sursa (job #3214713) | Cod sursa (job #3201993)
/*#include <bits/stdc++.h>
#include <fstream>
struct nod {
std::vector<int> vecini;
bool vizitat;
};
std::vector<nod> noduri;
void dfs(int nod_curent) {
std::cout << nod_curent + 1 << ' ';
noduri[nod_curent].vizitat = true;
std::sort(noduri[nod_curent].vecini.begin(), noduri[nod_curent].vecini.end());
//for(int i = 0; i < noduri[nod_curent].vecini.size(); i++)
for(int index_vecin : noduri[nod_curent].vecini) {
if(noduri[index_vecin].vizitat == false)
dfs(index_vecin);
}
}
int main() {
//std::ifstream fin("dfs.in");
freopen("dfs.in", "r", stdin);
freopen("dfs.out", "w", stdout);
int n, m; std::cin >> n >> m;
int start; std::cin >> start;
noduri.resize(n);
for(int i = 0; i < m; i++) {
int a, b;
std::cin >> a >> b;
a--; b--;
noduri[a].vecini.push_back(b);
noduri[b].vecini.push_back(a);
}
dfs(start - 1);
return 0;
}
*/
#include <bits/stdc++.h>
#include <queue>
const int LIM = 1e5+5;
std::vector<std::pair<int, int>> vecini[LIM];
long long dist[LIM];
struct nod {
long long dist;
int index;
bool operator<(const nod& other) const {
// calculezi raspunsul
return dist < other.dist;
}
};
void bfs(int start) {
for(int i = 0; i < LIM; i++)
dist[i] = 2e9;
std::priority_queue<nod> q;
q.push({0, start});
dist[start] = 0;
while(!q.empty()) {
int curent = q.top().index;
long long parcurs = q.top().dist;
q.pop();
if(dist[curent] < parcurs) continue;
for(auto v : vecini[curent]) {
if(dist[v.first] <= parcurs + v.second) continue;
dist[v.first] = parcurs + v.second;
q.push({dist[v.first], v.first});
}
}
}
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int n, m, start = 1; std::cin >> n >> m;
while(m--) {
int a, b, c; std::cin >> a >> b >> c;
a--; b--;
vecini[a].push_back({b, c});
}
bfs(start - 1);
for(int i = 1; i < n; i++)
{
if(dist[i] == 2e9)
std::cout << "0 ";
else
std::cout << dist[i] << ' ';
}
return 0;
}