Submission #1225332

#TimeUsernameProblemLanguageResultExecution timeMemory
1225332PanosPaskGame (APIO22_game)C++20
2 / 100
2 ms408 KiB
#include "game.h" #include <bits/stdc++.h> #define pb push_back using namespace std; const int BUCKET = 330; int N, K; vector<vector<int>> tmp; vector<vector<int>> revtmp; vector<vector<int>> adj_list; vector<vector<int>> revlist; //in[node]: Maximum i s.t there is inedge or path to node from i vector<int> in; // out[node]: Minimum i s.t there is outedge or path from node to i vector<int> out; void dfs(int node, int k, vector<vector<int>>& adj_list, vector<int>& c) { if (c[node] != -1) { return; } c[node] = k; for (auto neigh : adj_list[node]) { dfs(neigh, k, adj_list, c); } } void components(void) { for (int u = 0; u < N; u++) { for (auto v : tmp[u]) { adj_list[u].pb(v); } for (auto v : revtmp[u]) { adj_list[v].pb(u); } } in.assign(N, -1); out.assign(N, -1); for (int i = K - 1; i >= 0; i--) { for (auto u : adj_list[i]) { dfs(u, i, adj_list, in); } } for (int i = 0; i < K; i++) { for (auto v : revlist[i]) { dfs(v, i, revlist, out); } } } void init(int n, int k) { N = n; K = k; adj_list.resize(N); revlist.resize(N); tmp.resize(N); revtmp.resize(N); for (int i = 0; i < K - 1; i++) { adj_list[i].pb(i + 1); revlist[i + 1].pb(i); } } int add_teleporter(int u, int v) { if (u == v) { if (u < K) { return 1; } else { return 0; } } adj_list[u].pb(v); revlist[v].pb(u); components(); for (int i = 0; i < K; i++) { if (in[i] != -1 && out[i] != -1 && out[i] <= in[i]) { return 1; } } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...