답안 #1019099

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1019099 2024-07-10T13:32:18 Z Cookie Uzastopni (COCI15_uzastopni) C++14
144 / 160
500 ms 15700 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];
        assert(v[i] >= 1 && v[i] <= 100);
    }
    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);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 13660 KB Output is correct
2 Correct 7 ms 13660 KB Output is correct
3 Incorrect 8 ms 13660 KB Output isn't correct
4 Correct 8 ms 13588 KB Output is correct
5 Correct 8 ms 13616 KB Output is correct
6 Correct 9 ms 13656 KB Output is correct
7 Correct 9 ms 13660 KB Output is correct
8 Correct 10 ms 13660 KB Output is correct
9 Correct 9 ms 13660 KB Output is correct
10 Correct 9 ms 13660 KB Output is correct
11 Correct 400 ms 14168 KB Output is correct
12 Correct 397 ms 14172 KB Output is correct
13 Correct 415 ms 14168 KB Output is correct
14 Correct 462 ms 15700 KB Output is correct
15 Execution timed out 523 ms 15656 KB Time limit exceeded
16 Correct 459 ms 15700 KB Output is correct
17 Correct 404 ms 14172 KB Output is correct
18 Correct 401 ms 14256 KB Output is correct
19 Correct 463 ms 14172 KB Output is correct
20 Correct 469 ms 14096 KB Output is correct