Submission #1174507

#TimeUsernameProblemLanguageResultExecution timeMemory
1174507nuutsnoyntonUzastopni (COCI15_uzastopni)C++20
56 / 160
47 ms32580 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; const ll N = 2e2 + 5; vector < vector < vector < ll > > > dp(102, vector < vector < ll > > (102, vector < ll > (102)) ); ll c[N]; vector < ll > adj[N]; void Go(ll node, ll par) { ll j, r, sz, pd[N][N] ={0}; for ( ll chi : adj[node]) { if ( chi == par) continue; Go(chi, node); for ( j= 1; j <= 100; j ++) { for ( r = j; r <= 100; r ++) { pd[j][r] += dp[chi][j][r]; } } } for ( sz = 1; sz <= 100; sz ++) { for ( j = 1; j <= 100; j ++) { for ( r = 1; r< sz; r ++) { pd[j][j + sz - 1] = pd[j][j + sz - 1] + (pd[j][j + r - 1] * pd[j + r][j + sz - 1]); } } } ll p = c[node]; pd[p][p - 1]= 1; pd[p + 1][p]= 1; for ( j= p; j >= 1; j --) { for ( r = p; r <= 100; r ++) { dp[node][j][r] = pd[j][p - 1] * pd[p + 1][r]; } } } int main() { ll n, m, r, x, y, i, j, ans, t; cin >> n; for (i = 1; i <= n; i++) { cin >> c[i]; } for (i = 1; i < n; i ++) { cin >> x >> y; adj[x].push_back(y); adj[y].push_back(x); } Go(1, 1); ans = 0; for (i = 1; i<= 100; i ++){ for (j = i; j <= 100; j ++) { ans += dp[1][i][j]; } } cout << ans << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...