Submission #1160981

#TimeUsernameProblemLanguageResultExecution timeMemory
1160981Aviansh게임 (APIO22_game)C++20
2 / 100
8 ms14480 KiB
#include "game.h"

#include <bits/stdc++.h>

using namespace std;

const int maxn = 3e5+12;
vector<int>g[maxn];
vector<int>rg[maxn];
//maximum special that can get to here:
int s[maxn];
//minimum special that it can go to:
int e[maxn];

int myk;
int myn;

void init(int n, int k) {
    myk=k;
    myn=n;
    fill(s,s+n,-1);
    fill(e,e+n,1e9);
    for(int i = 0;i<k-1;i++){
        g[i].push_back(i+1);
        rg[i+1].push_back(i);
        s[i]=i;
        e[i]=i+1;
    }
    s[k-1]=k-1;
}

bool ans = 0;
//this will do maximising
void dfs1(int st,int val){
    if(s[st]>=val){
        return;
    }
    s[st]=val;
    if(e[st]<=s[st]){
        ans=1;
    }
    for(int i : g[st]){
        if(s[i]>=val){
            continue;
        }
        dfs1(i,val);
    }
}
//this will do minimising
void dfs2(int st,int val){
    if(e[st]<=val){
        return;
    }
    e[st]=val;
    if(e[st]<=s[st]){
        ans=1;
    }
    for(int i : rg[st]){
        if(e[i]<=val){
            continue;
        }
        dfs2(i,val);
    }
}

int add_teleporter(int u, int v) {
    if(max(u,v)<myk){
        if(v<=u){
            ans=1;
        }
    }
    if(ans>0){
        return 1;
    }
    g[u].push_back(v);
    rg[v].push_back(u);
    dfs1(v,s[u]);
    dfs2(u,e[v]);
    if(ans>0){
        return 1;
    }
    else{
        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...