제출 #1115177

#제출 시각아이디문제언어결과실행 시간메모리
1115177staszic_ojuzOlympic Bus (JOI20_ho_t4)C++17
0 / 100
1 ms592 KiB
#include <iostream> #include <vector> #include <queue> using namespace std; const int MAXN = 201; int n, m; const int MAX_ALL_N = 405; vector<pair<int, int>> sasiedzi[MAXN]; bool odwiedzona[MAX_ALL_N]; int dijkstra_odleglosci[MAX_ALL_N]; int dijkstra(int a, int b) { //z a do b for (int i = 0; MAX_ALL_N > i; i++) { odwiedzona[i] = false; dijkstra_odleglosci[i] = -1; } priority_queue<pair<int, int>> kopiec; kopiec.push({0, a}); pair<int, int> p1; int aktl_v, aktl_koszt; while (!kopiec.empty()) { p1 = kopiec.top(); kopiec.pop(); aktl_v = -p1.second; aktl_koszt = -p1.first; if (odwiedzona[aktl_v]) continue; else dijkstra_odleglosci[aktl_v] = aktl_koszt; for (pair<int, int> sasd: sasiedzi[aktl_v]) { if (odwiedzona[sasd.first]) continue; kopiec.push({-(aktl_koszt + sasd.second), sasd.first}); } } return dijkstra_odleglosci[b]; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m; int w1, w2, w3, w4; for (int i = 0; m > i; i++) { cin >> w1 >> w2 >> w3 >> w4; sasiedzi[w1].push_back({w2, w3}); sasiedzi[w1 + MAXN].push_back({w2 + MAXN, w3}); sasiedzi[w2].push_back({w1 + MAXN, w3 + w4}); } int wynik = 2000000000; int odl_do_n = dijkstra(1, n); int odl_n_do_1 = dijkstra(n, 1); int odl_do_n_prim = dijkstra(1, n + MAXN); int odl_n_prim_do_1_prim = dijkstra(n + MAXN, 1 + MAXN); if (odl_do_n != -1 && odl_n_do_1 != -1) { wynik = odl_do_n + odl_n_do_1; } if (odl_do_n_prim != -1 && odl_n_prim_do_1_prim != -1) { wynik = min(wynik, odl_do_n_prim + odl_n_prim_do_1_prim); } if (wynik == 2000000000) wynik = -1; cout << wynik; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...