제출 #1202219

#제출 시각아이디문제언어결과실행 시간메모리
1202219dzuizz게임 (APIO22_game)C++20
60 / 100
4091 ms35648 KiB
// Subtask 1
#include "game.h"
#include <bits/stdc++.h>
using namespace std;

constexpr int MAXN=3e5+5;
vector<int> g[MAXN],tg[MAXN];
int C[MAXN],G[MAXN];
queue<int> q;
bool vi[MAXN];
int N,K;

void init(int n, int k) {
  N=n,K=k;

  for(int i=0;i<K-1;++i){
    g[i].emplace_back(i+1);
    tg[i+1].emplace_back(i);
  }

  memset(C,-1,sizeof C);
  memset(G,0x3f,sizeof G);
  for(int i=0;i<K;++i) C[i]=i,G[i]=i;
}

int add_teleporter(int u, int v) {
  g[u].emplace_back(v);
  tg[v].emplace_back(u);

  // upd C
  if(C[v]<C[u]){
    q.emplace(v);
    C[v]=C[u];

    while(q.size()){
      int i=q.front(); q.pop();
      for(auto&j:g[i]) if(C[j]<C[i]){
        q.emplace(j);
        C[j]=C[i];
      }
    }
  }

  // upd G
  if(G[u]>G[v]){
    q.emplace(u);
    G[u]=G[v];
    while(q.size()){
      int i=q.front(); q.pop();
      for(auto&j:tg[i]) if(G[j]>G[i]){
        q.emplace(j);
        G[j]=G[i];
      }
    }
  }

  return G[v] <= C[u];
}

#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...