Submission #969694

#TimeUsernameProblemLanguageResultExecution timeMemory
969694anton게임 (APIO22_game)C++17
60 / 100
504 ms5720 KiB
#include "game.h"
#include<bits/stdc++.h>

using namespace std;
#define pii pair<int, int>

const int MAX_N = 3 * 1e4;

vector<int> adj[MAX_N];
vector<int> rev_adj[MAX_N];
int min_acc[MAX_N];
int N, K;

bool broken = false;
void rev_dfs(int u, int acc){
  //cout<<u<<" "<<acc<<endl;
  min_acc[u] = acc;
  if(u<K && acc<=u){
    broken = true;
  }
  for(auto e: rev_adj[u]){
    if(min_acc[e]>acc){
      rev_dfs(e, acc);
    }
  }
}

void init(int n, int k) {
  N= n, K = k;
  for(int i = 0; i<N; i++){
    min_acc[i] = K;
  }
  for(int i = 0; i<k-1; i++){
    adj[i].push_back(i+1);
    rev_adj[i+1].push_back(i);
  }
}

int add_teleporter(int u, int v) {
  adj[u].push_back(v);
  rev_adj[v].push_back(u);

  if(min_acc[v]<min_acc[u]){
    rev_dfs(u, min(v, min_acc[v]));
  }
  else if(v<min_acc[u]){
    rev_dfs(u, v);
  }
  if(broken){
    return 1;
  }
  //cout<<endl;
  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...