#include #include #include using namespace std; /* [問題メモ] v parent iの親がparent[i] v child iの子がparent[i] */ void create_tree(int v,vector> &connected,vector &parent,vector> &child){ for(int i=0;i &parent,vector> &child,int n,vector &memo,vector &memo_index){ if(child[n].empty()){ memo[n] = 0; memo_index[n] = -1; return 0; } int m = 0,max = 0; for(int i=0;i max){ memo_index[n] = i; max = m; } } memo[n] = max+1; return max+1; } int min_depth(vector &parent,vector> &child,int n,vector &memo,vector &memo_index){ if(child[n].empty()){ memo[n] = 0; memo_index[n] = -1; return 0; } int m = 0,min = 998244353; for(int i=0;i> N; vector parent(N); vector> child(N); vector> connected(N); for(int i=0;i> a; cin >> b; connected[a-1].push_back(b-1); connected[b-1].push_back(a-1); } create_tree(0,connected,parent,child); for(int i=0;i max_memo(N); vector min_memo(N); vector max_index_memo(N); vector min_index_memo(N); max_depth(parent,child,0,max_memo,max_index_memo); min_depth(parent,child,0,min_memo,min_index_memo); /*for(int i=0;i 0){ index = 0; if(turn % 2 == 0){ //Halcのターン m = 0; for(int i=0;i max_memo[child[current_node][i]]){ m = max_memo[child[current_node][i]]; index = i; } } current_node = child[current_node][index]; } turn++; } cout << turn << endl; turn = 0; current_node = 0; while(!child[current_node].empty()){ if(turn % 2 == 1){ //Halcのターン m = 0; for(int i=0;i max_memo[child[current_node][i]]){ m = max_memo[child[current_node][i]]; index = i; } } current_node = child[current_node][index]; } turn++; } cout << turn << endl; return 0; }