# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
149773 | 욱방켜!! (twitch.tv/wookje) (#200) | Bulb Game (FXCUP4_bulb) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "bulb.h"
std::vector<int> L, R;
int dist[300000], mdist;
void dfs(int c, int v)
{
mdist=std::max(mdist,v);
if(L[c]>=0) {
dist[L[c]]=dist[c]+1;
dfs(L[c],v);
}
if(R[c]>=0) {
dist[R[c]]=dist[c]+1;
dfs(R[c],v+1);
}
}
int FindWinner(int T, std::vector<int> L, std::vector<int> R){
int N = L.size(), c, n, t;
std::vector<int> t1, t2;
::L=L; ::R=R;
for(c=0;c>=0;c=L[c]) {
bool valid=false;
for(n=R[c];n>=0;n=L[n]) {
for(t=R[n];t>=0;t=L[t]);
if(t==-1) valid=true;
}
if(valid) t2.push_back(c);
if(n==-2) t1.push_back(c);
}
std::sort(t1.begin(),t1.end());
std::sort(t2.begin(),t2.end());
if(c==-2 || t1.size()>1 || t1.size()==1 && !binary_search(t2.begin(),t2.end(),t1[0])) return 0;
dfs(0,0);
if(t1.empty()) return mdist>1 || t2.size()>0;
return 1;
}