Submission #1202557

#TimeUsernameProblemLanguageResultExecution timeMemory
1202557trashaccount게임 (APIO22_game)C++20
0 / 100
1 ms1088 KiB
#include "game.h"
#include <bits/stdc++.h>
using namespace std;

const int NM = 3e4, KM = 1000;

int n, k;
vector <int> adj[NM+5];
int timer, num[NM+5], low[NM+5], comp, scc[NM+5], sz[NM+5];
stack <int> st;

void init(int _n, int _k){
  n = _n, k = _k;
  for (int i = 0; i < n; i++) adj[i].clear();
  for (int i = 0; i+1 < k; i++)
    adj[i].push_back(i+1);
}

void dfs(int u){
  num[u] = low[u] = ++timer;
  st.push(u);
  for (int v : adj[u]){
    if (v == u) continue;
    if (scc[v] > 0) continue;
    if (num[v] > 0){
      low[u] = min(low[u], num[v]);
    }
    else{
      dfs(v);
      low[u] = min(low[u], low[v]);
    }
  }
  if (low[u] == num[u]){
    comp++;
    sz[comp] = 0;
    int v = -1;
    while (v != u){
      v = st.top(); st.pop();
      scc[v] = comp;
      sz[comp]++;
    }
  }
}

int add_teleporter(int u, int v){
  adj[u].push_back(v);
  if (u == v && u < k) return 1;
  for (int i = 0; i < n; i++) num[i] = low[i] = scc[i] = 0;
  timer = 0;
  comp = 0;
  for (int i = 0; i < n; i++){
    if (num[i] > 0) continue;
    dfs(i);
  }
  for (int i = 0; i < k; i++){
    if (sz[scc[i]] > 1) 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...