제출 #1263011

#제출 시각아이디문제언어결과실행 시간메모리
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...