Submission #780245

#TimeUsernameProblemLanguageResultExecution timeMemory
780245Sohsoh84Friend (IOI14_friend)C++17
11 / 100
27 ms4372 KiB
#include "friend.h"
#include <bits/stdc++.h>

using namespace std;

#define debug(x)		cerr << #x << ": " << x << endl;

const int MAXN = 1e4 + 10;

int dp[MAXN];
vector<int> adj[MAXN];

inline void add(int u, int v) {
	adj[u].push_back(v);
	adj[v].push_back(u);
}

int findSample(int n, int C[], int host[], int protocol[]){
	for (int i = 1; i < n; i++) {
		if (protocol[i] % 2 == 0) add(host[i], i);
		if (protocol[i] > 0) {
			for (int u : adj[host[i]])
				add(i, u);
		}
	}

	for (int mask = 1; mask < (1 << n); mask++) {
		int v = __builtin_ctz(mask);
		dp[mask] = dp[mask ^ (1 << v)];

		int tmask = (1 << v);
		for (int u : adj[v])
			tmask |= (1 << u);

		dp[mask] = max(dp[mask], dp[(mask | tmask) ^ tmask] + C[v]);
	}

	return dp[(1 << n) - 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...