제출 #708939

#제출 시각아이디문제언어결과실행 시간메모리
708939600MihneaGame (APIO22_game)C++17
12 / 100
1 ms336 KiB
#include "game.h" #include <cmath> #include <functional> #include <fstream> #include <iostream> #include <vector> #include <algorithm> #include <string> #include <set> #include <map> #include <list> #include <time.h> #include <math.h> #include <random> #include <deque> #include <queue> #include <unordered_map> #include <unordered_set> #include <iomanip> #include <bitset> #include <cassert> #include <sstream> #include <chrono> #include <cstring> #include <numeric> using namespace std; int n; int k; vector<vector<int>> g; vector<vector<int>> ig; vector<int> maxfrom; vector<int> minto; void init(int nn, int kk) { n = nn; k = kk; g.clear(); ig.clear(); maxfrom.clear(); minto.clear(); g.resize(n + 1); ig.resize(n + 1); maxfrom.resize(n + 1); minto.resize(n + 1); for (int i = 1; i <= n; i++) { maxfrom[i] = -1; minto[i] = k + 1; } } bool check(int from, int to) { if (minto[to] <= maxfrom[from]) return 1; int relaxminto = ((to <= k) ? (to) : (minto[to])); if (relaxminto < minto[from]) { minto[from] = relaxminto; for (auto& vec : ig[from]) { if (check(vec, from)) { return 1; } } } int relaxmaxfrom = ((from <= k) ? (from) : (maxfrom[from])); if (relaxmaxfrom > maxfrom[to]) { maxfrom[to] = relaxmaxfrom; for (auto& vec : g[to]) { if (check(to, vec)) { return 1; } } } return 0; } int add_teleporter(int from, int to) { from++; to++; assert(1 <= from && from <= n); assert(1 <= to && to <= n); g[from].push_back(to); ig[to].push_back(from); if (from == to) { if (from <= k) { return 1; } else { return 0; } } if (to < from) { if (from <= k) { return 1; } } return check(from, to); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...