답안 #1019118

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1019118 2024-07-10T13:43:13 Z Cookie Uzastopni (COCI15_uzastopni) C++14
56 / 160
500 ms 8964 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 <= v[i]; j++){
                for(int k = v[i]; k <= 100; k++){
                    if(dp[j][k][i]){
                        dp[j][k][s] = 1;  
                    }
                }
            }
        }
    }
    dp[v[s]][v[s]][s] = 1;
    for(int i = 1; i <= 100; i++){
        for(int j = 1; j + i - 1 <= 100; j++){
            int l = j, r = j + i - 1;
            for(int k = l; k < r; k++){
                if(dp[l][k][s] && dp[k + 1][r][s])dp[l][r][s] = 1;
            }
        }
    }
    for(int i = 1; i <= 100; i++){
        for(int j = i; j <= 100; j++){
            if(i > v[s] || j < v[s])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);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 7004 KB Output is correct
2 Correct 12 ms 7004 KB Output is correct
3 Incorrect 14 ms 7076 KB Output isn't correct
4 Incorrect 14 ms 7004 KB Output isn't correct
5 Incorrect 16 ms 7004 KB Output isn't correct
6 Correct 16 ms 7000 KB Output is correct
7 Correct 17 ms 7192 KB Output is correct
8 Correct 21 ms 7000 KB Output is correct
9 Correct 16 ms 7004 KB Output is correct
10 Correct 17 ms 7004 KB Output is correct
11 Execution timed out 1070 ms 7516 KB Time limit exceeded
12 Execution timed out 1029 ms 7512 KB Time limit exceeded
13 Execution timed out 1094 ms 7512 KB Time limit exceeded
14 Execution timed out 1061 ms 8704 KB Time limit exceeded
15 Execution timed out 1016 ms 8784 KB Time limit exceeded
16 Execution timed out 1052 ms 8964 KB Time limit exceeded
17 Execution timed out 1076 ms 7516 KB Time limit exceeded
18 Execution timed out 1037 ms 7512 KB Time limit exceeded
19 Execution timed out 1093 ms 7760 KB Time limit exceeded
20 Execution timed out 1060 ms 7788 KB Time limit exceeded