Submission #1239791

#TimeUsernameProblemLanguageResultExecution timeMemory
1239791The_SamuraiSpy 3 (JOI24_spy3)C++20
0 / 100
10 ms2004 KiB
#include "Aoi.h" #include "bits/stdc++.h" namespace { using namespace std; using ll = long long; const ll inf = 1e18; int variable_example = 0; int function_example(int a, int b) { return a + b; } } // namespace std::string aoi(int n, int m, int q, int K, std::vector<int> A, std::vector<int> B, std::vector<long long> w, std::vector<int> T, std::vector<int> X) { sort(X.begin(), X.end()); vector<vector<pair<int, int>>> g(n); for (int i = 0; i < m; i++) { g[A[i]].emplace_back(B[i], i); g[B[i]].emplace_back(A[i], i); } auto get = [&](int to) -> vector<int> { vector<ll> dist(n, inf); vector<pair<int, int>> par(n); priority_queue<pair<ll, int>> pq; dist[0] = 0; pq.emplace(0, 0); while (!pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if (dist[u] < -d) continue; for (auto [v, i]: g[u]) { if (dist[v] <= dist[u] + w[i]) continue; dist[v] = dist[u] + w[i]; par[v] = make_pair(u, i); pq.emplace(-dist[v], v); } } int now = to; vector<int> ans; while (now != 0) { ans.emplace_back(par[now].second); now = par[now].first; } reverse(ans.begin(), ans.end()); return ans; }; vector<int> id(m, -1); for (int i = 0; i < K; i++) id[X[i]] = i; string ans(40 * K, '0'); for (int i = 0; i < K; i++) { for (int j = 0; j < 40; j++) { // cout << w[X[i]] << ' ' << j << ' ' << (w[X[i]] >> j & 1ll) << endl; ans[i * 40 + j] = (w[X[i]] >> j & 1ll) + '0'; } } // for (int i = 0; i < q; i++) { // auto way = get(T[i]); // for (int pos: way) { // if (id[pos] != -1) ans[i * K + id[pos]] = '1'; // } // } return ans; }
#include "Bitaro.h" #include "bits/stdc++.h" namespace { using namespace std; using ll = long long; const ll inf = 1e18; int variable_example = 0; int function_example(int a, int b) { return a + b; } } // namespace void bitaro(int n, int m, int Q, int K, std::vector<int> A, std::vector<int> B, std::vector<long long> w, std::vector<int> T, std::vector<int> X, std::string s) { sort(X.begin(), X.end()); // cout << '\t' << s << endl; vector<vector<pair<int, int>>> g(n); for (int i = 0; i < m; i++) { g[A[i]].emplace_back(B[i], i); g[B[i]].emplace_back(A[i], i); } for (int i = 0; i < K; i++) { w[X[i]] = 0; for (int j = 0; j < 40; j++) w[X[i]] += (ll((s[i * 40 + j] - '0'))) << j; } // vector<bool> can(m); // vector<int> id(m, -1); // for (int i = 0; i < K; i++) id[X[i]] = i; auto get = [&](int to) -> vector<int> { vector<ll> dist(n, inf); vector<pair<int, int>> par(n); priority_queue<pair<ll, int>> pq; dist[0] = 0; pq.emplace(0, 0); while (!pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if (dist[u] < -d) continue; for (auto [v, i]: g[u]) { ll now = dist[u]; // if (id[i] == -1) now += w[i]; // else now += can[i] ? 0 : inf; now += w[i]; if (dist[v] <= dist[u] + now) continue; dist[v] = dist[u] + now; par[v] = make_pair(u, i); pq.emplace(-dist[v], v); } } int now = to; vector<int> ans; while (now != 0) { ans.emplace_back(par[now].second); now = par[now].first; } reverse(ans.begin(), ans.end()); return ans; }; for (int i = 0; i < Q; i++) { // for (int j = 0; j < K; j++) can[X[j]] = s[i * K + j] - '0'; auto way = get(T[i]); // for (int j = 0; j < K; j++) can[X[j]] = false; answer(way); } }
#Verdict Execution timeMemoryGrader output
Fetching results...