Submission #587056

#TimeUsernameProblemLanguageResultExecution timeMemory
587056JomnoiFriend (IOI14_friend)C++17
16 / 100
27 ms4204 KiB
#include <bits/stdc++.h>
#include "friend.h"
using namespace std;

const int MAX_N = 1e5 + 5;

int N, C[MAX_N];
int dp[MAX_N][2];
vector <int> graph[MAX_N];

void dfs(int u) {
	dp[u][1] = C[u];
	for(auto v : graph[u]) {
		dfs(v);

		dp[u][0] += max(dp[v][0], dp[v][1]);
	}

	for(auto v : graph[u]) {
		dp[u][1] = max(dp[u][1], dp[u][0] - max(dp[v][0], dp[v][1]) + dp[v][0] + C[u]);
	}
}

// Find out best sample
int findSample(int n, int confidence[], int host[], int protocol[]){
	N = n;
	int cnt[3] = {};
	for(int i = 0; i < N; i++) {
		C[i] = confidence[i];
	}
	for(int i = 1; i < N; i++) {
		cnt[protocol[i]]++;
	}

	int ans = 0;
	if(n <= 10) {
		for(int i = 1; i < N; i++) {
			vector <int> need;
			if(protocol[i] == 0) {
				need.push_back(host[i]);
			}
			else if(protocol[i] == 1) {
				for(auto v : graph[host[i]]) {
					need.push_back(v);
				}
			}
			else if(protocol[i] == 2) {
				need.push_back(i);
				for(auto v : graph[host[i]]) {
					need.push_back(v);
				}
			}

			for(auto v : need) {
				graph[i].push_back(v);
				graph[v].push_back(i);
			}
		}

		for(int mask = 0; mask < (1<<N); mask++) {
			set <int> consider;
			int sum = 0;
			for(int i = 0; i < N; i++) {
				if(mask & (1<<i)) {
					sum += C[i];
					consider.insert(i);
				}
			}

			for(auto u : consider) {
				for(auto v : graph[u]) {
					if(consider.count(v)) {
						sum = 0;
					}
				}
			}
			ans = max(ans, sum);
		}
	}
	else if(cnt[0] == N - 1) {
		for(int i = 1; i < N; i++) {
			graph[host[i]].push_back(i);
		}

		dfs(0);

		ans = max(dp[0][0], dp[0][1]);
	}
	else if(cnt[1] == N - 1) {
		for(int i = 0; i < N; i++) {
			ans += confidence[i];
		}
	}
	else if(cnt[2] == N - 1) {
		for(int i = 0; i < N; i++) {
			ans = max(ans, confidence[i]);
		}
	}
	else {
		// do something
	}
	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...