Submission #1051083

#TimeUsernameProblemLanguageResultExecution timeMemory
1051083beaconmcSpy 3 (JOI24_spy3)C++17
23 / 100
188 ms10568 KiB
#include "Aoi.h" #include <bits/stdc++.h> typedef long long ll; #define FOR(i,x,y) for(ll i=x; i<y; i++) #define FORNEG(i,x,y) for(ll i=x; i>y; i--) using namespace std; namespace { const ll INF = 10000000000000000; const ll maxn = 10005; vector<vector<ll>> edges[maxn]; vector<ll> prevs[maxn]; ll dists[maxn]; bool visited[maxn]; } // namespace string aoi(int N, int M, int Q, int K, vector<int> A,vector<int> B, vector<long long> C, vector<int> T, vector<int> X) { string ans; FOR(i,0,M){ edges[A[i]].push_back({B[i], C[i], i}); edges[B[i]].push_back({A[i], C[i], i}); } FOR(i,0,Q){ FOR(k,0,maxn) dists[k] = INF, prevs[k] = {-1, -1}, visited[k] = 0; priority_queue<vector<ll>> pq; dists[0] = 0; pq.push({0, 0}); while (pq.size()){ vector<ll> node = pq.top(); if (node[1] == T[i]) break; pq.pop(); node[0] = -node[0]; if (node[0] != dists[node[1]]) continue; for (auto&i : edges[node[1]]){ if (dists[i[0]] > node[0] + i[1]){ prevs[i[0]] = {node[1], i[2]}; dists[i[0]] = node[0] + i[1]; pq.push({-dists[i[0]], i[0]}); } } } unordered_set<ll> stuff; ll cur = T[i]; while (prevs[cur][1] != -1){ stuff.insert(prevs[cur][1]); cur = prevs[cur][0]; } FOR(j,0,K){ if (stuff.count(X[j])) ans += '1'; else ans += '0'; } } return ans; }
#include "Bitaro.h" #include <bits/stdc++.h> typedef long long ll; #define FOR(i,x,y) for(ll i=x; i<y; i++) #define FORNEG(i,x,y) for(ll i=x; i>y; i--) using namespace std; namespace { const ll INF = 10000000000000000; const ll maxn = 10005; vector<vector<ll>> edges[maxn]; vector<ll> prevs[maxn]; ll dists[maxn]; bool visited[maxn]; } // namespace void bitaro(int N, int M, int Q, int K, vector<int> A, vector<int> B, vector<long long> C, vector<int> T, vector<int> X, string s) { FOR(i,0,M){ edges[A[i]].push_back({B[i], C[i], i}); edges[B[i]].push_back({A[i], C[i], i}); } FOR(i,0,Q){ FOR(k,0,maxn) dists[k] = INF, prevs[k] = {-1, -1}, visited[k] = 0; unordered_set<ll> idk; FOR(j, K*i, K*(i+1)){ if (s[j] == '1') idk.insert(X[j-K*i]); } unordered_set<ll> idkman; for (auto&i : X) idkman.insert(i); FOR(i,0,maxn){ for (auto&j : edges[i]){ if (idk.count(j[2])) j[1] = 1; else if (idkman.count(j[2])) j[1] = INF; } } priority_queue<vector<ll>> pq; dists[0] = 0; pq.push({0, 0}); while (pq.size()){ vector<ll> node = pq.top(); if (node[1] == T[i]) break; pq.pop(); node[0] = -node[0]; if (node[0] != dists[node[1]]) continue; for (auto&i : edges[node[1]]){ if (dists[i[0]] > node[0] + i[1]){ prevs[i[0]] = {node[1], i[2]}; dists[i[0]] = node[0] + i[1]; pq.push({-dists[i[0]], i[0]}); } } } vector<int> stuff; ll cur = T[i]; while (prevs[cur][1] != -1){ stuff.push_back(prevs[cur][1]); cur = prevs[cur][0]; } reverse(stuff.begin(), stuff.end()); answer(stuff); } }
#Verdict Execution timeMemoryGrader output
Fetching results...