Submission #1155307

#TimeUsernameProblemLanguageResultExecution timeMemory
1155307dnnndaCat Exercise (JOI23_ho_t4)C++20
31 / 100
2095 ms17592 KiB
#include<bits/stdc++.h> using namespace std; #define S second #define F first #define ll long long #define int long long //#pragma GCC optimize("Ofast, unroll-loop") //#pragma GCC target("avx,avx2") #pragma GCC optimize("O3") const int inf=0x3f3f3f3f; const ll inff=0x3f3f3f3f3f3f3f3f; const int X=1000000007; int p[200005]; ll ans[200005]; vector<int> adj[200005]; ll dfs(int mx, int node, int pre, int l){ if(p[node]>mx) return 0; ll ret=l+ans[node]; for(int i:adj[node]) if(i!=pre) ret=max(ret,dfs(mx,i,node,l+1)); return ret; } signed main(){ ios::sync_with_stdio(0), cin.tie(0); int n; cin >> n; for(int i=1 ; i<=n ; i++) cin >> p[i]; for(int i=1 ; i<n ; i++){ int a, b; cin >> a >> b; adj[a].push_back(b); adj[b].push_back(a); } vector<int> v; for(int i=1 ; i<=n ; i++) v.push_back(i); sort(v.begin(),v.end(),[&](int a, int b){ return p[a]<p[b]; }); for(int i:v){ ans[i]=dfs(p[i],i,0,0); //cout << i << ' ' << ans[i] << '\n'; } cout << *max_element(ans+1,ans+n+1) << '\n'; return 0; } void test(){ string ss; cin >> ss; int n=ss.size(); ss='.'+ss; while(1){ int t; cin >> t; string s=ss; s[t]='R'; while(t>=1&&t<=n){ for(int i=1 ; i<=n ; i++){ if(i==t) cout << '('; cout << s[i]; if(i==t) cout << ')'; } cout << '\n'; if(s[t]=='R') s[t]='B', t++; else s[t]='R', t--; } } }
#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...