Submission #1368678

#TimeUsernameProblemLanguageResultExecution timeMemory
1368678horiaboeriuFriend (IOI14_friend)C++20
100 / 100
12 ms2272 KiB
#include <bits/stdc++.h>
#include "friend.h"
using namespace std;
const int MAXN = 100000;
int dp[MAXN][2];//dp[nod][0/1] = suma maxima pe subarborele sau daca l-am ales sau nu pe nod
//doar ca practic este pe arborele care se formeaza de la fiecare nod la hostul lui
int maxim(int a, int b) {
    return a > b ? a : b;
}
int findSample(int n, int confidence[], int host[], int protocol[]) {
    int i, nod;
    for (i = 0; i < n; i++) {
        dp[i][1] = confidence[i];
    }
    for (i = n - 1; i > 0; i--) {
        nod = host[i];
        if (protocol[i] == 0) {//i are muchie in graf catre nod
            dp[nod][1] += dp[i][0];
            dp[nod][0] += maxim(dp[i][0], dp[i][1]);
        } else if (protocol[i] == 1) {//i are muchie in graf catre cei cu muchie catre nod, deci este ca si cum l-as alege pe nod
            dp[nod][1] = maxim(dp[nod][1] + dp[i][0], maxim(dp[nod][1] + dp[i][1], dp[nod][0] + dp[i][1]));
            dp[nod][0] += dp[i][0];
        } else {//i are muchie catre nod si catre ceilalti catre care are nod muchie
            dp[nod][1] = maxim(dp[nod][1] + dp[i][0], dp[nod][0] + dp[i][1]);
            dp[nod][0] += dp[i][0];

        }
    }
    return maxim(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...