Submission #98761

#TimeUsernameProblemLanguageResultExecution timeMemory
98761popopo3124Uzastopni (COCI15_uzastopni)C++14
160 / 160
40 ms21240 KiB
#include<bits/stdc++.h> using namespace std; typedef long long int lli; const lli N=100009, K=109; lli n, a[N]; vector<lli> D[N]; void Inp() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } for(int i=1;i<n;i++) { lli u, v; cin>>u>>v; D[u].push_back(v); } } lli l[N][K], r[N][K], dd1[N], dd2[N]; void DFS(lli u) { for(auto v: D[u]) { DFS(v); } l[u][a[u]]=1; r[u][a[u]]=1; for(int i=a[u];i>1;i--) { if(l[u][i]==0) { continue; } for(auto v: D[u]) { if(dd1[v]||r[v][i-1]==0) { continue; } dd1[v]=1; for(int j=1;j<=100;j++) { if(l[v][j]) { l[u][j]=1; } } } } for(int i=a[u];i<100;i++) { if(r[u][i]==0) { continue; } for(auto v: D[u]) { if(dd2[v]||l[v][i+1]==0) { continue; } dd2[v]=1; for(int j=1;j<=100;j++) { if(r[v][j]) { r[u][j]=1; } } } } } void Solve() { DFS(1); lli cnt1=0, cnt2=0; for(int i=1;i<=100;i++) { if(l[1][i]) { cnt1++; } if(r[1][i]) { cnt2++; } } cout<<cnt1*cnt2; } int main() { //freopen("test.inp","r",stdin);freopen("out.out","w",stdout); Inp(); Solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...