Submission #1362994

#TimeUsernameProblemLanguageResultExecution timeMemory
1362994Mamikonm1Game (APIO22_game)C++20
60 / 100
4019 ms19168 KiB
//#include<game>
#include <iostream>
#include <vector>
#include <cmath>
#include<map>
#include <algorithm>
#include <iomanip>
#include <string>
#include<stack>
#include <set>
#include <queue>
#include <chrono>
#include<array>
#include<bitset>
#include<unordered_map>
#include<random>
#include<cassert>
#include<cstring>
using namespace std;
using ll = long long;
using db = double;
const float pi = 3.14159265359;
#define V vector
#define VI V<int>
#define P pair<int,int>
#define rep(i, a, b, step) for (int i = int(a); i <= int(b); i += step)
#define repl(i,a,b,step) for (int i = int(a); i >= int(b); i -= step)
#define sn << '\n'
#define ed << endl
#define sz size()
#define print cout <<
#define debug(x) cerr<< #x << " = " << x sn;
#define mpII map<int,int>   
#define mine min_element    
#define maxe max_element    
#define all(v) begin(v), end(v)
#define txt freopen("snakes.in", "r", stdin); freopen("snakes.out", "w", stdout)    
#define pb push_back    
#define pq priority_queue
#define rev reverse
#define nuyn(a) a.erase(unique(all(a)), end(a))
#define nx next_permutation         
#define pk pop_back()
#define START print "Start" sn
#define END print "End" sn
#define ff first
#define ss second       
#define ts to_string 
#define ub upper_bound       
#define mk make_pair 
#define lb lower_bound               
#define testcase int t;cin>>t;while(t--)solution();
int n, k;
VI mx, el;
queue<int>q;
V<bool>vis;
V<VI>graph;
void init(int N, int K) {
    n = N;
    k = K;
    vis = V<bool>(N);
    graph = V<VI>(n);
    mx = VI(N, -1);
    rep(i, 0, K - 1, 1)mx[i] = i;
}
int add_teleporter(int u, int v) {
    if (v < k and mx[u] >= v)return 1;
    graph[u].pb(v);
    if (mx[v] < mx[u]) {
        q.push(u);
        el.clear();
        vis[u] = 1;
        while (!q.empty()) {
            u = q.front();
            q.pop();
            el.pb(u);
            for (auto& i : graph[u]) {
                if (i < k and mx[u] >= i)return 1;
                if (vis[i] or mx[i] >= mx[u])continue;
                vis[i] = 1;
                mx[i] = mx[u];
                q.push(i);
            }
        }
        for (auto& i : el)vis[i] = 0;
    }
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...