Submission #587387

#TimeUsernameProblemLanguageResultExecution timeMemory
587387mohammad_kilaniGame (APIO22_game)C++17
60 / 100
4026 ms42544 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; #define oo 1000000010 vector< vector< int > > g , g2; vector< int > mn , mx , last , last2; int n , k; void init(int n, int k) { ::n = n; ::k = k; g.resize(n); g2.resize(n); mn.resize(n); mx.resize(n); for(int i = 0 ;i < k;i++){ mn[i] = mx[i] = i; } for(int i = k ;i < n;i++){ mn[i] = oo; mx[i] = -oo; } } void CheckMax(int u){ if(mx[u] == -oo) return; for(int i = 0 ;i < (int)g[u].size();i++){ if(mx[g[u][i]] < mx[u]){ mx[g[u][i]] = mx[u]; CheckMax(g[u][i]); } } } void CheckMin(int u){ if(mn[u] == oo) return; for(int i = 0 ;i < (int)g2[u].size();i++){ if(mn[g2[u][i]] > mn[u]){ mn[g2[u][i]] = mn[u]; CheckMin(g2[u][i]); } } } int add_teleporter(int u, int v) { if(u < k && v < k){ if(u >= v) return 1; return 0; } //mx[v] g[u].push_back(v); if(mx[v] < mx[u]) CheckMax(u); g2[v].push_back(u); if(mn[u] > mn[v]) CheckMin(v); if(u < k) u = v; if(mn[u] <= mx[u] && (mx[u] != k)){ 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...