Submission #1263011

#TimeUsernameProblemLanguageResultExecution timeMemory
1263011namhhCat Exercise (JOI23_ho_t4)C++20
100 / 100
192 ms56792 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
const int N = 2e5+5;
const int lg = 18;
int n,a[N],par[N],st[N][lg],h[N],pos[N],dp[N];
vector<int>adj[N];
void dfs(int u, int p){
	h[u] = h[p]+1;
	st[u][0] = p;
	for(int i = 1; i < lg; i++) st[u][i] = st[st[u][i-1]][i-1];
	for(int v: adj[u]){
		if(v != p) dfs(v,u);
	}
}
int lca(int u, int v){
	if(h[u] < h[v]) swap(u,v);
	for(int i = lg-1; i >= 0; i--){
		if(h[st[u][i]] >= h[v]) u = st[u][i];
	}
	if(u == v) return u;
	for(int i = lg-1; i >= 0; i--){
		if(st[u][i] != st[v][i]){
			u = st[u][i];
			v = st[v][i];
		}
	}
	return st[u][0];
}
void init(){
	for(int i = 1; i <= n; i++) par[i] = i;
}
int find(int u){
	if(u == par[u]) return u;
	return par[u] = find(par[u]);
}
void join(int u, int v){
	u = find(u);
	v = find(v);
	if(a[u] < a[v]) swap(u,v);
	par[v] = u;
}
signed main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin >> n;
	init();
	for(int i = 1; i <= n; i++){
		cin >> a[i];
		pos[a[i]] = i;
	}
	for(int i = 1; i < n; i++){
		int u,v;
		cin >> u >> v;
		adj[u].push_back(v);
		adj[v].push_back(u);
	}
	dfs(1,0);
	for(int i = 1; i <= n; i++){
		int u = pos[i];
		for(int v: adj[u]){
			v = find(v);
			if(a[u] > a[v]){
				dp[u] = max(dp[u],dp[v]+h[u]+h[v]-2*h[lca(u,v)]);
				join(u,v);
			}
		}
	}
	cout << dp[pos[n]];
}
//                                                                                                    
//                                +.::=.                   .*: -.                                     
//                               --    :.                 =  -:--                                     
//                               .=    ..  .-=++*+++=:.  =      :                                     
//                                .=   ....:=%@@@@@*:    .     :.                                     
//                            .-+=..:   :.  .+##%##+.  .:     .+:                                     
//                         :*@**%* ..   :.               ::..:.:. --:                                 
//             .--.      +@@@@@%:   .==:                         .###@*                               
//            :--  -:  -:@@@@#                   -                 =@@@@#. .=  : +                    
//            .:    -=--==:                      ==      +-          :*%*++=   .:#                    
//             -.     .:.           .             +.      -*.   =@@.   .-.      .=                    
//               +=..  ..          --             .*       .#. +@#      -      :==*=                  
//             .=.+=::::           =.              =-        ##@+        :--+.#@%++%*                 
//            .++@@:        =      +               .%%%%@@@@@@@@@@@@@@%.    :-@#-: -@.                
//           :@@@@=        .+     .=                *#     .#@.=-             =@::-:@:                
//          :-@@%.         --     --                :@*.  .%#   +.          -  ** :=%. .*@#           
//    :-.  .-*-.           -:     +.                 %-=::@#    .*   :      -  :%- +%.+@+@@           
// .- :.  **:     +:       =      #                : =* =@#      -=  #     #@@@:-@ :*@@. %@           
//  -=:      ::  .* .=     +      #                =..@  .*.      +. *.    *#=.+%@*-%*   %@           
//   :=. :.. .:  +. -=    .+      #                -- #.   =-     .+ +:    =@+   .+-++   @%           
//       ++-=.   *  --    :=      #                :- +-    :*     =:+:    -@#  :@#*%@@@%@+           
//       *.     --  --    :=      #                .= #@#=.   +-   :=+:    :%@-#@@@#@+:@@#            
//       +      +.  --    :=      #                .= :=       .+.  +*.     *@@+=@-=@*-.#@.           
//       =      +   :=    .+      #                 = .=         .#.-@.     -+ .%# -@@=  @#           
//      .=     .=   .+     +      *.                = .+..         :*@      == =@. -#@#: @%           
//      .=     .=    *     +      =:               .=.**:   =--:     #    * *- %*  =*=@+#@:           
//      .=     :=    #     =.     .+ .             .= --.#@@@@@#@@@: *   -= #..@=  **:@@@:            
//       +     .=    +:    --      + #             := +@%:@#: -:%= ===   #..* .#@@%@+.@@+             
//       *     .=    .*    .=      -:-=            :- #= ++  =- =@. *:  .* -*:  :  . .@@%
//       *      +     *     +.     :- #            -- #  *: .@@  %- +   =- +-.- :.   .@@@.            
//       -:     =:    :=    .*      +.--           =:--  .*.:.:  # .=   +  *+    -   :@%@=            
//        +      *   *:+.    ==     .+ +.          +.#     .=-:=-  --  -- =+:    =   -@#%*            
//        +      -=   *==     *.     -=--         :+-=       :::   =:  +  %:.    =   %@+##            
//        .=      +:   +*-     +      +:+.        +:*.            .+  +: #.:. - .+  -@@=#%            
//         -.      =.  :=#-    :=      =:*    .-==#+-             +: =- +:-..- :%*  =@@:*%            
//         .-       +.  --+=           .**%+-:.                  -* +-:*:.:.  =@@* :-@@ *%            
//          -.       +=  -+==      -*#-          =-               ..        .%@#@=.--@* *%            
//           =.       .+: :+-*-=+:                                      +%+*@@%%@-= +@- *#            
//            -::=      :**=:                                          :@@@@@@%@@-  #@  #*            
//             -: +:       -                                          .@@#%@@%@@:  :@# .#+            
//              :- :#=     --                                        :@@@#@-=@#.   =@- .%=            
//                =:.@@%=   =#                   .+.=.              +@@@@* -*:     #%  :@:            
//                 .+ *@@@@@@@@*                                  :@@*@@@*        .@+  -@.            
//                   .+=%@*%@@@@@#:                             =@@@%:.:          +@:  +%             
//                     .=%@%#@@@@##@*:                       =%@@@#:              @#   ##             
//                         :#@%@@@@#@@@@+                 :*. @:                 =@-  .@+             
//                                 .+@%#%@@:=-..       .=:    %*==+.             @%   -@-             
//                                  =.    =:     :-:.::     .-- .= -:           =@-    -              
//                                 .-  :-. ::              .-     =-:                                 
//       .=+-.=-.*-                 =       -..+*:     .-:.-       =                  .+*#   ....     
//      =.         -=               -:      ..    -.  +.  -.      +.                -+   -*=:    +.   
//     .-            +-              *             -.*           #+               .+   =.        :=   
//     :-             --=*:        -+ *=           -#           -  -##+-..    .:+#:              +.   
//     :-             =    --=:==+*.    =:         .:     .=              =**=    =             .+    
//     .=             +     =--              :-          .=.               --    .-             =     
//      =             .-    --:               .-+*@%*#                     +.    +             :-     
//       +             +-   -:-           :*@@@@@@*@#*@@%*=:              =:    -              -.     
//       .*            -    ::+         =@@@@#-.-@@%%@@+=%@@@%=          -::   =              :-
//        .+           :.    +-.       #@@@=   +@@@-#@@%.   +@@@+       .:=   .-             +:       
//         .--.         -.   :=-      :@@+   :@@@@# =@@@#     -%@#      -=    ::         :-+-         
//           * -         +    --.      +@@#=%@@@@@. :@@@@%     :%@     :=    =.          -=+          
//            .-**-      -.    --       .%@@@@+%@+   @@+%@@*-+@@@.    :=.   -          :+*-           
//                   :===-==.  .-=            *@%    *@= +%%##=.     :=:   :. .::-==-.                
//                           .::-=+=+=-:.     #%:    -#:           .-*#+===-:.                        
//                                           ..::---====---::.
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...