Submission #115769

#TimeUsernameProblemLanguageResultExecution timeMemory
115769thecodingwizardFriend (IOI14_friend)C++11
27 / 100
30 ms1528 KiB
#include <bits/stdc++.h>
#include "friend.h"

using namespace std;

#define FOR(a, b, c) for (int a = b; a < c; a++)
#define ll long long
#define vi vector<int>
#define pb push_back
#define mp make_pair

// Find out best sample
int findSample(int n, int confidence[], int host[], int protocol[]) {
	if (n <= 10) {
		// Subtask 1
		set<int> friends[n];
		FOR(i, 1, n) {
			int h = host[i], p = protocol[i];
			if (p == 0) {
				// IAmYourFriend
				friends[i].insert(h);
				friends[h].insert(i);
			} else if (p == 1) {
				// MyFriendsAreYourFriends
				for (int u : friends[h]) {
					friends[u].insert(i);
					friends[i].insert(u);
				}
			} else {
				// WeAreYourFriends
				friends[i].insert(h);
				friends[h].insert(i);
				for (int u : friends[h]) {
					friends[u].insert(i);
					friends[i].insert(u);
				}
			}
		}

		int ans = 0;
		for (int i = 0; i < (1 << n); i++) {
			int curAns = 0;
			bool invalid = false;
			for (int j = 0; j < n; j++) {
				if (!(i & (1 << j))) continue;
				for (int f : friends[j]) {
					if (f == j) continue;
					if (i & (1 << f)) {
						invalid = true;
						break;
					}
				}
				if (invalid) break;
				curAns += confidence[j];
			}
			if (!invalid) ans = max(ans, curAns);
		}
		return ans;
	} else {
		bool isSubtaskTwo = true;
		for (int i = 1; i < n; i++) {
			if (protocol[i] != 1) isSubtaskTwo = false;
		}
		if (isSubtaskTwo) {
			// Subtask two: Sum all confidence values
			int ans = 0;
			for (int i = 0; i < n; i++) ans += confidence[i];
			return ans;
		}

		// Subtask Three: We Are Your Friends, entire graph is connected
		int ans = 0;
		for (int i = 0; i < n; i++) ans = max(ans, confidence[i]);
		return ans;
	}
	exit(1);
}
#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...