Submission #404208

#TimeUsernameProblemLanguageResultExecution timeMemory
404208wmrmrFriend (IOI14_friend)C++17
46 / 100
32 ms4584 KiB
#include "friend.h"
#include <bits/stdc++.h>
using namespace std;
const int MAX = 1e5;

bool adj[10][10];
int dp[MAX][2];
vector<int> g[MAX];

void pt4_DFS(int v, int pai)
{
	for( int i=0;i<g[v].size();i++ )
	{
		int prox = g[v][i];
		if(prox == pai) continue;
		pt4_DFS(prox,v);
		dp[v][0] += max( dp[prox][0] , dp[prox][1]);
		dp[v][1] += dp[prox][0];	
	}
}

// Find out best sample
int findSample(int n,int confidence[],int host[],int protocol[]){
	int ans = 0;
	bool pt2 = 1, pt3 = 1, pt4 = 1;
	for(int i=1;i<n;i++)
	{
		if(protocol[i] != 0) pt4 = 0;
		if(protocol[i] != 1) pt2 = 0;
		if(protocol[i] != 2) pt3 = 0;
	}
	for(int i=0;i<n;i++) dp[i][1] = confidence[i];
	if(n <= 10)
	{
		ans = 0;
		for(int i=1;i<n;i++)
		{
			int p = host[i];
			if(protocol[i] != 1) adj[i][p] = adj[p][i] = 1;
			if(protocol[i] != 0)
				for(int j=0;j<i;j++)
					adj[i][j] = adj[j][i] = adj[j][i] || adj[p][j];
		}
		int dbg = 0;
		for(int cur = 0 ; cur < (1<<n) ; cur++)
		{
			bool valid = 1;
			for(int i=0;i<n;i++) for(int j=i+1;j<n;j++)
			{
				if( (cur&(1<<i)) && (cur&(1<<j)) )
					if(adj[i][j]) valid = 0;
			}
			int temp = 0;
			for(int i=0;i<n;i++)
				if(cur&(1<<i)) temp += confidence[i];
			if(valid) ans = max(ans,temp), dbg = cur;
		}
		return ans;
	}
	if(pt2)
	{
		for(int i=0;i<n;i++) ans += confidence[i];
		return ans;
	}
	if(pt3)
	{
		for(int i=0;i<n;i++) ans = max(ans,confidence[i]);
		return ans;
	}
	if(n <= 1e3)
	{
		for(int i=1;i<n;i++)
		{
			int p = host[i];
			if(protocol[i] != 1) g[i].push_back(p), g[p].push_back(i);
			if(protocol[i] != 0)
			{
				for(int j=0;j<g[p].size();j++)
				{
					int prox = g[p][j];
					g[prox].push_back(i); g[i].push_back(prox);
				}
			}
		}
	}
	if(pt4)
	{
		pt4_DFS(0,0);
		return max( dp[0][0] , dp[0][1] );
	}
		
	return 0;
}

Compilation message (stderr)

friend.cpp: In function 'void pt4_DFS(int, int)':
friend.cpp:12:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   12 |  for( int i=0;i<g[v].size();i++ )
      |               ~^~~~~~~~~~~~
friend.cpp: In function 'int findSample(int, int*, int*, int*)':
friend.cpp:44:7: warning: variable 'dbg' set but not used [-Wunused-but-set-variable]
   44 |   int dbg = 0;
      |       ^~~
friend.cpp:78:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |     for(int j=0;j<g[p].size();j++)
      |                 ~^~~~~~~~~~~~
#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...