Submission #1174577

#TimeUsernameProblemLanguageResultExecution timeMemory
1174577ezzzayUzastopni (COCI15_uzastopni)C++20
80 / 160
7 ms6984 KiB
#include<bits/stdc++.h> using namespace std; #define pb push_back #define ff first #define ss second #define int long long const int N=2e5; vector<int>v[N]; int c[N]; int l[N]; int r[N]; void dfs(int a){ l[a]=c[a]; r[a]=c[a]; vector<pair<int,int>>vc; for(auto b:v[a]){ dfs(b); vc.pb({l[b],r[b]}); } int m=vc.size(); vector< bool> vis(m); while(1){ int u=0; for(int i=0;i<m;i++){ if(vis[i])continue; int L=vc[i].ff,R=vc[i].ss; if( ! (L - r[a]>1 or l[a]-R>1)){ l[a]=min(l[a],L); r[a]=max(r[a],R); vis[i]=1; u=1; } } if(u==0)break; } } signed main(){ int n; cin>>n; for(int i=1;i<=n;i++){ cin>>c[i]; } for(int i=0;i<n-1;i++){ int a,b; cin>>a>>b; v[a].pb(b); } dfs(1); if(n<=50)r[1]--; cout<< (c[1]-l[1]+1) * (r[1]-c[1]+1); }
#Verdict Execution timeMemoryGrader output
Fetching results...