Submission #1248408

#TimeUsernameProblemLanguageResultExecution timeMemory
1248408DedibeatFriend (IOI14_friend)C++20
27 / 100
1 ms584 KiB
#include "friend.h"
#include <bits/stdc++.h>
using namespace std;
pair<int, int> dfs(int v, vector<int> adj[], int val[])
{
	int pick = val[v], no_pick = 0;
	for(int u : adj[v])
	{
		auto [x1, x2] = dfs(u, adj, val);
		pick += x2;
		no_pick += x1;
	}
	return make_pair(max(pick, no_pick), no_pick);
}

int findSample(int n,int confidence[],int host[],int protocol[]){
	vector<int> g_main[n], g_group[n];
	int head[n];
	int tot[n];
	vector<int> con = {0};
	for(int i = 0; i < n; i++)
		head[i] = i, tot[i] = 0;
	for(int i = 1; i < n; i++)
	{
		int par = host[i];
		int par_h = head[par];
		if(protocol[i] == 0) 
		{
			g_main[par_h].push_back(i);
			con.push_back(i);
		}
		else 
		{
			head[i] = par_h;
			if(protocol[i] == 2)
			{
				g_group[par].push_back(i);
			}
			else 
			{
				con.push_back(i);
			}
		}
	}


	for(int v : con)
	{
		auto [ans, _] = dfs(v, g_group, confidence);
		//cout << " head " << v << " ans : " << ans << endl;
		tot[head[v]] += ans;
	}

	auto [ans, _] = dfs(0, g_main, tot);
	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...