Submission #748612

#TimeUsernameProblemLanguageResultExecution timeMemory
748612vjudge1Uzastopni (COCI15_uzastopni)C++17
160 / 160
40 ms18540 KiB
#include<bits/stdc++.h> using namespace std; #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #define fi first #define se second #define ll long long #define pii pair<int,int> #define piii pair<int, pair<int, int> #define v(int) vector<int> #define si size() #define foe(i,a,b) for(int i=a;i<=b;++i) #define fol(i,a,b) for(int i=a;i<b;++i) #define pb push_back #define Bit(mask,i) (1<<i)&mask #define offBit(mask,i) (1<<i)^mask #define onBit(mask,i) (1<<i)mask #define CNT(x) __builtin_popcountll(x) const ll int mod = 1e9+7; const ll int base = 2309; const ll int inf = 1e18; const int N = 1e4+10; const int LG = 20; // ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄▄ ▄ ▄▄▄▄ // █▄▄█ █ █ █ █ █▄▄█ █ █ ██ █ █ ▄▄ // █ █ █▄▄█ █▄▄█ █ █ █▄▄█ █ ██ █▄▄█ vector<int> adj[N]; bitset<101> dp[N][105]; ll a[N], n; bool cmp(int x, int y) { return a[x] < a[y]; } void DFS(int u, int p) { foe(i,1,100) dp[u][i].set(i-1); sort(adj[u].begin(), adj[u].end(), cmp); bool f = 0; for (int v: adj[u]) { if(v == p) continue; DFS(v, u); if (!f && a[v] >= a[u]) { f = 1; foe(l,1,100) { int w = dp[u][l][a[u]-1]; dp[u][l].reset(); if(w) dp[u][l].set(a[u]); } } foe(l,1,a[v]) fol(r,l-1,a[v]) if (dp[u][l][r]) dp[u][l] |= dp[v][r+1]; } if(!f) { foe(l,1,100) { int w = dp[u][l][a[u]-1]; dp[u][l].reset(); if(w) dp[u][l].set(a[u]); } } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n; foe(i,1,n) { int x; cin >> x; dp[i][x].set(x); a[i] = x; } fol(i,1,n) { int u, v; cin >> u >> v; adj[u].pb(v); adj[v].pb(u); } DFS(1, -1); int ans = 0; foe(i,1,100) ans += dp[1][i].count(); cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...