//#include //#include //#include //#include //#include #include #include #include #define MAX ((int)2e9 + 5) #define MAXP ((int)1e5 + 5) #define MAXL ((ll)1e18 + 5) #define MAX_X ((int)2001) #define MAX_Y ((int)2001) #define pi acos(-1) //#define MOD ((int)1e9 + 7) #define MOD ((int)998244353 + 0) #define BAS ((int)1e6 + 3) //#define BAS ((int)2e5 + 3) #define N ((int)2e5 + 9) #define eps (1e-8) #define fastio ios_base::sync_with_stdio(false),cin.tie(NULL) #define logn 17 #define endl "\n" #define mpp make_pair #define BUCK 105 #define LEF (idx<<1) #define RIG ((idx<<1)|1) //#define int ll using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef unsigned long long ull; /*fast io ios_base::sync_with_stdio(false); cin.tie(NULL); */ typedef tree < int, null_type, less < int >, rb_tree_tag, tree_order_statistics_node_update > o_set; typedef tree < pair < int, int >, null_type, less < pair < int, int > >, rb_tree_tag, tree_order_statistics_node_update > o_setp; /// o_set s; /// s.order_of_key(k) : Number of items strictly smaller than k . /// *(s.find_by_order(k)) : K-th element in a set (counting from zero). typedef long double ldd; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int my_rand(int l, int r) { return uniform_int_distribution(l,r) (rng); } int dia[N] , dep[N]; void dfs(int n , int p) { dep[n] = dia[n] = 0; int mxx1 = 0 , mxx2 = 0; for(int nxt:vec[n]){ if(nxt != p){ dfs(nxt , n); dep[n] = max(dep[n] , dep[nxt] + 1); dia[n] = max(dia[n] , dia[nxt]); mxx2 = max(mxx2 , dep[nxt] + 1); if(mxx2 > mxx1) swap(mxx1 , mxx2); } } dia[n] = max(dia[n] , mxx1 + mxx2); } int main() { /// problem: https://www.spoj.com/problems/RTREE/ dfs(root , 0); while(q--){ /// code } }