Submission #1050144

#TimeUsernameProblemLanguageResultExecution timeMemory
1050144vjudge1Commuter Pass (JOI18_commuter_pass)C++17
0 / 100
106 ms21116 KiB
#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math,inline") #include <bits/stdc++.h> #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,lzcnt,mmx,abm,avx,avx2,fma") using namespace std; // using namespace __gnu_pbds; // typedef tree<pair<int,int>,null_type,less<pair<int,int>>,rb_tree_tag,tree_order_statistics_node_update> ordered_set; #define static_assert(...); #include <tr2/dynamic_bitset> using custom_bitset = tr2::dynamic_bitset<__uint128_t>; #define speed ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define int long long #define bigInt __int128 #define dl double long #define fl float #define all(s) s.begin(), s.end() #define pub push_back #define puf push_front #define pob pop_back #define pof pob_front #define ins insert #define F first #define S second #define len length const int N = 100010; const int M = 1010; const int LN = 131072; const int INF = 1000000000000000000; const int MOD = 1e9 + 7; const int BLOCK = 500; int binpow(int a, int b, int MOD) { int res = 1; while (b > 0) { if (b & 1) { res = res * a; res %= MOD; } a = a * a; a %= MOD; b >>= 1; } return res; } int MMI(int a, int MOD) { int ret = binpow(a, MOD - 2, MOD); return ret; } // int mdiv(int a, int b) { // int ret = a*MMI(b); // ret %= MOD; // return ret; // } int mmul(int a, int b) { int ret = (a % MOD) * (b % MOD); ret %= MOD; return ret; } int madd(int a, int b) { int ret = (a % MOD) + (b % MOD); ret %= MOD; return ret; } int msub(int a, int b) { int ret = (a % MOD) - (b % MOD); ret += MOD; ret %= MOD; return ret; } int GCD(int a, int b) { if (b == 0) { return a; } return GCD(b, a % b); } int LCM(int a, int b) { return a*b / GCD(a, b); } struct pqComp { bool operator()(const pair<int, int>& p1, const pair<int, int>& p2) const { return (p1.F < p2.F) || (p1.F == p2.F && p1.S < p2.S); } }; bool pCompF(pair<int, int>& p1, pair<int, int>& p2) { return p1.F < p2.F; } bool pCompS(pair<int, int>& p1, pair<int, int>& p2) { return p1.S < p2.S; } bool pCompFS(pair<int, int>& p1, pair<int, int>& p2) { return (p1.S < p2.S) || (p1.S == p2.S && p1.F < p2.F); } vector <pair<int, int>> DS {{1, 0}, {0, 1}};//{{0, -1}, {1, 0}, {0, 1}, {-1, 0}};//, {-1, -1}, {-1, 1}, {1, -1}, {1, 1}}; int n, m, S, T, U, V, d[N + 1], anc[N + 1]; vector<pair<int,int>> g[2*N]; void dijkstra(int st) { priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q; q.push({0, st}); d[st] = 0; while (q.size()) { auto v = q.top(); q.pop(); for (auto [u, c]: g[v.S]) { if (v.F + c < d[u]) { d[u] = v.F + c; anc[u] = v.S; q.push({d[u], u}); } } } } void solve() { cin >> n >> m >> S >> T >> U >> V; for (int i = 1; i <= m; ++i) { int v, u, c; cin >> v >> u >> c; g[v].pub({u, c}); g[u].pub({v, c}); } fill(d + 1, d + n + 1, INF); dijkstra(S); vector<int> path; while (anc[T]) { path.pub(T); T = anc[T]; } fill(d + 1, d + n + 1, INF); dijkstra(V); int ans = INF; for (int v: path) { ans = min(ans, d[v]); } cout << ans; } signed main() { speed; int T = 1; //cin >> T; while (T--) { solve(); } } /* НЕ ЗАХОДИТ РЕШЕНИЕ? 1) ПРОВЕРЬ НА ОЧЕВИДНЫЕ ОШИБКИ В КОДЕ 2) ПРОВЕРЬ НА ПЕРЕПОЛНЕНИЯ 3) УБЕДИСЬ В ПРАВИЛЬНОСТИ АЛГОРИТМА */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...