Submission #1363755

#TimeUsernameProblemLanguageResultExecution timeMemory
1363755toma_ariciu친구 (IOI14_friend)C++20
100 / 100
12 ms2284 KiB
#include <bits/stdc++.h>

using namespace std;

const int maxN = 200005;
int dp[maxN][2];

void maxSelf(int &x, int y) {
    if (y > x) {
        x = y;
    }
}

int findSample(int n,int confidence[],int host[],int protocol[]) {
    for (int i = 0; i < n; i++) {
        dp[i][1] = confidence[i];
    }
    
    for (int i = n - 1; i; i--) {
        // cout << i << ' ' << dp[i][0] << ' ' << dp[i][1] << '\n';
        int x = host[i];
        int p = dp[x][1];
        int q = dp[x][0];

        if (protocol[i] == 0) {
            maxSelf(dp[x][1], p + dp[i][0]);
            maxSelf(dp[x][0], q + max(dp[i][0], dp[i][1]));           
        }
        
        if (protocol[i] == 1) {
            maxSelf(dp[x][0], q + dp[i][0]);
            maxSelf(dp[x][1], q + dp[i][1]);
            maxSelf(dp[x][1], p + max(dp[i][0], dp[i][1]));
        }

        if (protocol[i] == 2) {
            maxSelf(dp[x][0], q + dp[i][0]);
            maxSelf(dp[x][1], p + dp[i][0]);
            maxSelf(dp[x][1], q + dp[i][1]);
        }
    }

    return max(dp[0][0], dp[0][1]);
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...