# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
962844 | 2024-04-14T08:55:11 Z | 0npata | 게임 (APIO22_game) | C++17 | 0 ms | 0 KB |
#include "game.h" #include<bits/stdc++.h> using namespace std; const int N = 30'005; const int K = 1'005; #define pb push_back #define vec vector vec<int> nk(N, -1); vec<set<pair<int, int>>> g(N); vec<vec<int>> g(N); int k; int n; void init(int in, int ik) { n = in; k = ik; for(int i = 0; i<k; i++) { nk[i] = i; } } int add_teleporter(int u, int v) { nk[v] = max(nk[v], nk[u]); g[u].insert({nk[v], v});; vec<int> stack{v}; while(stack.size() > 0) { int cur = stack.back(); stack.pop_back(); // cerr << "CUR: " << cur << '\n'; vec<pair<int, int>> upd(0); for(auto nxt : g[cur]) { int l = nxt.second; //cerr << "l: " << l << ' ' << '\n'; if(l<k) { //cerr << "HERE NO?" << '\n'; // special node if(nk[cur] >= l) { return 1; } } if(nk[l] < nk[cur]) { stack.pb(l); nk[l] = nk[cur]; upd.pb(nxt); } else if(nk[l] != nxt.first) { upd.pb(nxt); } if(nxt.first >= nk[cur]) break; } for(auto val : upd) { g[cur].erase(val); g[cur].insert({nk[val.second], val.second}); } } return 0; }