//#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); } pair < int , int > dfs(int n , int p) /// returns ( dis , node ) ; node is the farthest from n , dis = distance(node , n) { pair < int , int > ans = {0,n}; for(auto nxt:vec[n]){ if(nxt.first != p){ pair < int , int > tmp = dfs(nxt.first , n); tmp.first += nxt.second; ans = max(ans , tmp); } } return ans; } int main() { pair < int , int > dia = dfs(1,0); int a = dia.second; dia = dfs(a,0); int b = dia.second; return 0; }