DFS、及びセクションにおける現在のノードに含まれるすべての周りの電流に接続された接続点は、左端点は、その+を順次、次いでDFSにこれらのノードを行う、DFSの優先順位は、エンドポイントが、その結果、右端点大きい左これは、最初に囲まれます、そして、彼らが交差しないように、層との接合部分(DFS後のもの)は、それを囲みます。
1 の#define HAVE_STRUCT_TIMESPEC 2の#include <ビット/ STDC ++ H> 3 使用して 名前空間STDを、 4 INT CNT = 1 。 5ベクター< INT > V [ 500007 ]。 6 INTを L [ 500007 ]、R [ 500007 ]。 7つの ボイド DFS(int型のx、int型FA){ 8 のための(INT iが= 0 ; I <V [x]は.size(); ++ i)が 9 であれば(!V [x]は[I] = FA) 10 L [V [x]は[I] = ++ CNT。 11 R [X] = ++ CNT。 12 のための(INTは iがV [X] .size()= - 1 ; I> = 0 ; - I) 13 であれば(!V [x]は[I] = FA) 14の DFS(V [X] [I] 、バツ); 15 } 16 INT メイン(){ 17の IOS :: sync_with_stdio(偽)。 18 cin.tie(NULL)。 19 cout.tie(NULL)。 20 INT N。 21 CIN >> N。 22 のための(int型 I =1、I <N; ++ I){ 23 のint X、Y。 24 CIN >> X >> Y。 25 V [X] .push_back(Y)。 26 V [Y] .push_back(X)。 27 } 28 DFS(1、0 ); 29 L [ 1 ] = 1 。 30 のために(INT iは= 1 ; iが<= N; ++ i)が 31 COUT << L [I] << " " << R [I] << " \ n " 。 32 リターン 0 。 33 }