Submission #413738

#TimeUsernameProblemLanguageResultExecution timeMemory
413738AntekbFriend (IOI14_friend)C++14
11 / 100
1081 ms65540 KiB
#include "friend.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
// Find out best sample
const int N=1e5+5;
int dp[N][2], w[N];
vector<int> E[N];
void dfs(int v){
	for(int u:E[v]){
		dfs(u);
		dp[v][0]+=dp[u][1];
		dp[v][1]+=dp[u][0];
	}
	dp[v][1]+=w[v];
	if(dp[v][1]<dp[v][0])dp[v][1]=dp[v][0];
}
int findSample(int n,int confidence[],int host[],int protocol[]){
	for(int i=0; i<n; i++){
		w[i]=confidence[i];
	}
	for(int i=1; i<n; i++){
		if(protocol[i]==0){
			E[host[i]].push_back(i);
			E[i].push_back(host[i]);
		}
		else{
			for(int j:E[host[i]]){
				E[i].push_back(j);
				E[j].push_back(i);
			}
			if(protocol[i]==2){
				E[host[i]].push_back(i);
				E[i].push_back(host[i]);
			}
		}
	}
	int ans=0;
	for(int i=0; i<(1<<n); i++){
		int k=0;
		bool b=1;
		for(int j=0; j<n; j++){
			if(i&(1<<j)){
				k+=w[j];
				for(int l:E[j])if(i&(1<<l))b=0;
			}
		}
		if(b)ans=max(ans, k);
	}
	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...