DFS의 시작시간, 종료시간
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2615 m개의 쿼리가 들어 온다. a,b 쿼리는 b가 a의 서브트리에 속하는가? 쿼리가 많으므로 한 쿼리를 O(1)로 처리해야 한다. DFS로 각 노드의 DFS 시작시간과 종료시간을 기록해두면 저 쿼리를 O(1)로 처리 할 수 있다. 각각의 시작시간을 Start, 종료시간을 Finish라 하면 Start(a) < Start(b) and Finish(b) < Finish(a) 이면 b는 a의 서브트리이다. # include <bits/stdc++.h> using namespace std ; int n,m; vector< vector< int > > adj; vector< int > start; vector< int > finish; int main () { int t; scanf("%d",&t); for(int tc=1;tc<=t;++tc){ scanf("%d",&n); int cnt = 0; int curtime = 0; adj. clear (); for(int i=0;i<n;++i){ adj. push_back (vector<int>()); int x; scanf("%d",&x); for(int j=0;j<x;++j){ adj[i]. push_back (++cnt); } } start = vector<int>(cnt+1,0); finish = vector<int>(cnt+1,