Submission #874116

#TimeUsernameProblemLanguageResultExecution timeMemory
874116siewjhFriend (IOI14_friend)C++17
35 / 100
1 ms4696 KiB
#include "friend.h"
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
vector<int> adj[MAXN];
int dp[MAXN][2], conf[MAXN];
int dfs(int x, bool take){
	if (dp[x][take] != -1) return dp[x][take];
	int ans = 0;
	if (take){
		ans = conf[x];
		for (int nxt : adj[x]) ans += dfs(nxt, 0);
	}
	else{
		for (int nxt : adj[x]) ans += max(dfs(nxt, 1), dfs(nxt, 0));
	}
	return dp[x][take] = ans;
}

// Find out best sample
int findSample(int n, int confidence[], int host[], int protocol[]){
	if (protocol[1] == 0){
		for (int i = 1; i < n; i++) adj[host[i]].push_back(i);
		for (int i = 0; i < n; i++) conf[i] = confidence[i];
		memset(dp, -1, sizeof(dp));
		return max(dfs(0, 0), dfs(0, 1));
	}
	else if (protocol[1] == 1){
		int ans = 0;
		for (int i = 0; i < n; i++) ans += confidence[i];
		return ans;
	}
	else{
		int ans = 0;
		for (int i = 0; i < n; i++) ans = max(ans, confidence[i]);
		return ans;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...