답안 #791832

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
791832 2023-07-24T10:41:25 Z 이동현(#10049) Nestabilnost (COI23_nestabilnost) C++17
19 / 100
1500 ms 38772 KB
#include <bits/stdc++.h>
#define int long long
#define mi(x, y) (x = min(x, y))
#define ma(x, y) (x = max(x, y))
using namespace std;

const int NS = (int)3e5 + 4;
int n;
int a[NS], f[NS], mn[NS];
int dp[NS], len[NS];
vector<int> way[NS];
int md;

void sol3(int x, int pr){
    len[x] = a[x];
    for(auto&nxt:way[x]){
        if(nxt == pr){
            continue;
        }

        if(a[x] + 1 == a[nxt]){
            sol3(nxt, x);
            len[x] = max(len[x], len[nxt]);
        }
    }
}

int sol2(int x, int pr){
    int rv = 0;
    for(auto&nxt:way[x]){
        if(nxt == pr){
            continue;
        }

        if((a[x] + 1) % md == a[nxt]){
            rv += sol2(nxt, x);
        }
        else{
            rv += dp[nxt];
        }
    }
    if(dp[x]){
        rv = min(rv, dp[x]);
    }
    return rv;
}

void sol(int x, int pr){
    for(auto&nxt:way[x]){
        if(nxt == pr){
            continue;
        }

        sol(nxt, x);
    }

    md = (int)1e18;
    sol3(x, pr);
    dp[x] = sol2(x, pr) + mn[len[x]];
    md = len[x] + 1;
    dp[x] = min(dp[x], sol2(x, pr) + f[len[x]]);
}



signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    cin >> n;
    for(int i = 0; i < n; ++i){
        cin >> a[i];
    }
    for(int i = 0; i < n; ++i){
        cin >> f[i];
    }
    for(int i = n - 1; i >= 0; --i){
        mn[i] = f[i];
        if(i + 1 < n){
            mn[i] = min(mn[i], mn[i + 1]);
        }
    }

    for(int i = 1; i < n; ++i){
        int x, y;
        cin >> x >> y;
        --x, --y;
        way[x].push_back(y);
        way[y].push_back(x);
    }

    sol(0, -1);

    cout << dp[0] << '\n';
    
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 87 ms 8092 KB Output is correct
2 Correct 89 ms 8068 KB Output is correct
3 Correct 132 ms 8088 KB Output is correct
4 Correct 42 ms 7996 KB Output is correct
5 Correct 8 ms 7892 KB Output is correct
6 Correct 5 ms 7892 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1569 ms 38772 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 7380 KB Output is correct
2 Correct 4 ms 7380 KB Output is correct
3 Correct 3 ms 7380 KB Output is correct
4 Correct 3 ms 7404 KB Output is correct
5 Correct 3 ms 7380 KB Output is correct
6 Correct 3 ms 7380 KB Output is correct
7 Correct 3 ms 7380 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 87 ms 8092 KB Output is correct
2 Correct 89 ms 8068 KB Output is correct
3 Correct 132 ms 8088 KB Output is correct
4 Correct 42 ms 7996 KB Output is correct
5 Correct 8 ms 7892 KB Output is correct
6 Correct 5 ms 7892 KB Output is correct
7 Correct 3 ms 7380 KB Output is correct
8 Correct 4 ms 7380 KB Output is correct
9 Correct 3 ms 7380 KB Output is correct
10 Correct 3 ms 7404 KB Output is correct
11 Correct 3 ms 7380 KB Output is correct
12 Correct 3 ms 7380 KB Output is correct
13 Correct 3 ms 7380 KB Output is correct
14 Correct 6 ms 7764 KB Output is correct
15 Correct 6 ms 7740 KB Output is correct
16 Correct 7 ms 7764 KB Output is correct
17 Correct 6 ms 7764 KB Output is correct
18 Correct 8 ms 7728 KB Output is correct
19 Incorrect 6 ms 7764 KB Output isn't correct
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 87 ms 8092 KB Output is correct
2 Correct 89 ms 8068 KB Output is correct
3 Correct 132 ms 8088 KB Output is correct
4 Correct 42 ms 7996 KB Output is correct
5 Correct 8 ms 7892 KB Output is correct
6 Correct 5 ms 7892 KB Output is correct
7 Execution timed out 1569 ms 38772 KB Time limit exceeded
8 Halted 0 ms 0 KB -