Submission #472071

#TimeUsernameProblemLanguageResultExecution timeMemory
472071SirCovidThe19thUzastopni (COCI15_uzastopni)C++17
80 / 160
94 ms18756 KiB
#include <bits/stdc++.h> using namespace std; #define FOR(i, x, y) for (int i = x; i < y; i++) const int mx = 10005, mv = 105; int n, A[mx], ans; vector<int> adj[mx]; bitset<mv> dp[mx][mv]; void dfs(int i, int p){ dp[i][A[i]][A[i]] = 1; for (int x : adj[i]) if (x != p){ dfs(x, i); FOR(j, 0, mv) dp[i][j] |= dp[x][j]; } for (int j = mv - 1; j; j--) FOR(k, j, mv - 1) if (dp[i][j][k]) dp[i][j] |= dp[i][k + 1]; FOR(j, 0, mv){ if (j <= A[i]) dp[i][j] = dp[i][j] >> A[i] << A[i]; else dp[i][j].reset(); } } int main(){ cin >> n; FOR(i, 0, n) cin >> A[i]; FOR(i, 0, n - 1){ int a, b; cin >> a >> b; a--; b--; adj[a].push_back(b); adj[b].push_back(a); } dfs(0, 0); FOR(i, 0, mv) ans += dp[0][i].count(); cout<<ans<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...