Submission #1019098

# Submission time Handle Problem Language Result Execution time Memory
1019098 2024-07-10T13:28:54 Z Cookie Uzastopni (COCI15_uzastopni) C++14
152 / 160
449 ms 15956 KB
#include<bits/stdc++.h>
#include<fstream>
using namespace std;
#define sz(a) (int)a.size()
#define ALL(v) v.begin(), v.end()
#define ALLR(v) v.rbegin(), v.rend()
#define ll long long
#define pb push_back
#define forr(i, a, b) for(int i = a; i < b; i++)
#define dorr(i, a, b) for(int i = a; i >= b; i--)
#define ld double
#define vt vector
#include<fstream>
#define fi first
#define se second
#define pll pair<ll, ll>
#define pii pair<int, int>
#define mpp make_pair
const ld PI = 3.14159265359, prec = 1e-9;;
//using u128 = __uint128_t;
const int cox[4] = {1, 0, -1, 0};
const int coy[4] = {0, -1, 0, 1};
const ll mod = 998244353, pr = 31;
const int mxn = 1e4 + 5, mxs = 3e5 * 50, sq = 500, mxv = 10000 + 1;
const int max_iter = 8e4, global_iter = 15e5 + 5;
//const int base = (1 <<18);
const ll inf = 1e9 + 5, neg = -69420, inf2 = 1e14;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
int n;
bitset<mxv>dp[105][105], pre[105][105];
int v[mxn + 1];
vt<int>adj[mxn + 1];
void dfs(int s, int p){
    
    for(auto i: adj[s]){
        if(i != p){
            dfs(i, s);
            for(int j = 1; j <= 100; j++){
                for(int k = j; k <= 100; k++){
                    if(dp[j][k][i]){
                        dp[j][k][s] = 1;  
                        for(int l = k + 1; l <= 100; l++){
                            if(pre[k + 1][l][s])dp[j][l][s] = 1;
                        }
                        
                        for(int l = j - 1; l >= 1; l--){
                            if(pre[l][j - 1][s])dp[l][k][s] = 1;
                        }
                       
                    }
                }
            }
            for(int j = 1; j <= 100; j++){
                for(int k = j; k <= 100; k++){
                    pre[j][k][s] = dp[j][k][s]; 
                }
            }
        }
    }
    pre[v[s]][v[s] - 1][s] = pre[v[s] + 1][v[s]][s] = 1;
    for(int i = 1; i <= 100; i++){
        for(int j = i; j <= 100; j++){
            if(i <= v[s] && j >= v[s] && pre[i][v[s] - 1][s] && pre[v[s] + 1][j][s]){
                dp[i][j][s] = 1;
            }else{
                dp[i][j][s] = 0;
            }
        }
    }
}
void solve(){
    cin >> n;
    for(int i = 1; i <= n; i++)cin >> v[i];
    for(int i = 1; i < n; i++){
        int a, b; cin >> a >> b;
        adj[a].pb(b); adj[b].pb(a);
    }
    dfs(1, -1);
    int res = 0;
    for(int i = 1; i <= 100; i++){
        for(int j = i; j <= 100; j++){
            
            res += dp[i][j][1];
        }
    }
    cout << res;
}
 
 
 
signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    //freopen("KHONG.inp", "r", stdin);
    //freopen("KHONG.out", "w", stdout);
    int tt; tt = 1;
    while(tt--)solve();
    return(0);
}
# Verdict Execution time Memory Grader output
1 Correct 9 ms 13660 KB Output is correct
2 Correct 7 ms 13508 KB Output is correct
3 Incorrect 8 ms 13468 KB Output isn't correct
4 Correct 9 ms 13660 KB Output is correct
5 Correct 8 ms 13640 KB Output is correct
6 Correct 11 ms 13660 KB Output is correct
7 Correct 9 ms 13740 KB Output is correct
8 Correct 10 ms 13660 KB Output is correct
9 Correct 11 ms 13660 KB Output is correct
10 Correct 9 ms 13600 KB Output is correct
11 Correct 383 ms 14352 KB Output is correct
12 Correct 410 ms 14404 KB Output is correct
13 Correct 391 ms 14168 KB Output is correct
14 Correct 427 ms 15956 KB Output is correct
15 Correct 449 ms 15956 KB Output is correct
16 Correct 443 ms 15956 KB Output is correct
17 Correct 441 ms 14400 KB Output is correct
18 Correct 422 ms 14392 KB Output is correct
19 Correct 435 ms 14168 KB Output is correct
20 Correct 437 ms 14380 KB Output is correct