제출 #1003163

#제출 시각아이디문제언어결과실행 시간메모리
1003163mispertion게임 (APIO22_game)C++17
60 / 100
4096 ms54608 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; #define pb(x) push_back(x); const int N = 5e5; const int infi = INT_MAX; vector<int> g[N], ig[N]; int mxs[N], mns[N], n, k; bool dfsmn(int v){ bool was = false; for(auto u : ig[v]){ if(mns[u] > mns[v]){ mns[u] = mns[v]; if((mns[u] <= mxs[u] && u >= k) || ((mns[u] < mxs[u] && u < k))) was = true; if(dfsmn(u)) was = true; } } return was; } bool dfsmx(int v){ bool was = false; if((mns[v] <= mxs[v] && v >= k) || ((mns[v] < mxs[v] && v < k))) was = true; for(auto u : g[v]){ if(mxs[u] < mxs[v]){ mxs[u] = mxs[v]; if(dfsmx(u)) was = true; } } return was; } void init(int _n, int _k) { n = _n; k = _k; for(int i = 0; i < k; i++) mns[i] = mxs[i] = i; for(int i = k; i < n; i++) mns[i] = infi, mxs[i] = -infi; } int add_teleporter(int u, int v) { if(u == v && u < k) return 1; if(u == v) return 0; g[u].pb(v); ig[v].pb(u); int ret = 0; if(mns[v] < mns[u]){ mns[u] = mns[v]; if(dfsmn(u)) ret = 1; } if(mxs[v] < mxs[u]){ mxs[v] = mxs[u]; if(dfsmx(v)) ret = 1; } return ret; }
#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...