Submission #105249

# Submission time Handle Problem Language Result Execution time Memory
105249 2019-04-11T04:17:13 Z TuGSGeReL Friend (IOI14_friend) C++14
46 / 100
92 ms 17408 KB
#include "friend.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

using namespace std;
using namespace __gnu_pbds;

#define ll long long
#define mp make_pair
#define pub push_back
#define pob pop_back()
#define ss second
#define ff first
#define mt make_tuple
#define pof pop_front()
#define fbo find_by_order
#define ook order_of_key

typedef tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> indexed_set;
using pll = pair <ll, ll>;
using pii = pair <int, int>;

int used[1001], pre[3], dp[1001][2], fl[1001][1001], par[1001];
vector <int> edg[1001];

void build (int n, int host[], int protocol[])
{
	for (int i = 1; i < n; i++)
	{
		if ( !protocol[i] )
		{
			edg[i].pub(host[i]);
			edg[host[i]].pub(i);
		} else if ( protocol[i] == 1 )
		{
			for (int j = 0; j < edg[host[i]].size(); j++)
			{
				edg[edg[host[i]][j]].pub(i);
				edg[i].pub(edg[host[i]][j]);
			}
		} else {
			for (int j = 0; j < edg[host[i]].size(); j++)
			{
				edg[i].pub(edg[host[i]][j]);
				edg[edg[host[i]][j]].pub(i);
			}

			edg[i].pub(host[i]);
			edg[host[i]].pub(i);
		}
	}	
}

int solve1(int n, int confidence[], int host[], int protocol[])
{
	
	int ans = 0;
	
	for (int i = 0; i < (1 << n); i++)
	{
		memset(used, 0, sizeof used);
		bool boo = 0;
		int res = 0;

		for (int j = 0; j < n; j++)
		{
			if ( i & (1 << j) )
			{
				for ( auto x : edg[j] )
					if ( used[x] )
						boo = 1;

				res += confidence[j];
				used[j] = 1;
			}
		}

		if ( !boo )
			ans = max(ans, res);
	}
	
	return ans;
}

void dfs(int u, int par)
{
	bool boo = 1;
	for (auto x : edg[u])
		if ( x != par )
			dfs(x, u), boo = 0;
	
	if ( par != -1 )
	{
		dp[par][0] += max(dp[u][1], dp[u][0]);
		dp[par][1] += dp[u][0];
	}
}

bool bfs(int u, int n)
{
	memset(used, 0, sizeof used);
	par[u] = -1;
	used[u] = 1;
	queue<int>q;
	q.push(u);
	
	while (!q.empty())
	{
		u = q.front();
		q.pop();
		
		for (int i = 0; i < n; i++)
		{
			if ( fl[u][i] && !used[i])
			{
				q.push(i);
				used[i] = 1;
			}
		}
	}
	
	if ( used[n - 1] )
		return 1;
		
	return 0;
}

int findSample(int n,int confidence[],int host[],int protocol[]){
	
	build(n, host, protocol);
	
	if ( n <= 10 )
		return solve1(n, confidence, host, protocol);
	
	for (int i = 1; i < n; i++)
		pre[protocol[i]]++;
	
	if ( pre[1] == n - 1 )
	{
		int ans = 0;
		
		for (int i = 0; i < n; i++)
			ans += confidence[i];
		
		return ans;
	}
	
	if ( pre[2] == n - 1 )
	{
		int ans = 0;
		
		for (int i = 0; i < n; i++)
			ans = max(ans, confidence[i]);
		
		return ans;
	}
	
	if ( pre[0] == n - 1 )
	{
		for (int i = 0; i < n; i++)
			dp[i][1] = confidence[i];
		
		dfs(0, -1);
		
		return max(dp[0][0], dp[0][1]);
	}
	
	for (int i = 0; i < n; i++)
	{
		for (auto x : edg[i])
			fl[i][x] = fl[x][i] = 1;
		
		if ( i && i != n - 1 )
			fl[i][i] = 1;
	}
	int ans = 0;
	while (bfs(0, n))
	{
		for (int i = n - 1; par[i] != -1; i = par[i])
		{
			fl[par[i]][i]--;
			fl[i][par[i]]++;
		}		
		ans++;
	}
	return ans;
}

Compilation message

friend.cpp: In function 'void build(int, int*, int*)':
friend.cpp:36:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for (int j = 0; j < edg[host[i]].size(); j++)
                    ~~^~~~~~~~~~~~~~~~~~~~~
friend.cpp:42:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for (int j = 0; j < edg[host[i]].size(); j++)
                    ~~^~~~~~~~~~~~~~~~~~~~~
friend.cpp: In function 'void dfs(int, int)':
friend.cpp:87:7: warning: variable 'boo' set but not used [-Wunused-but-set-variable]
  bool boo = 1;
       ^~~
# Verdict Execution time Memory Grader output
1 Correct 3 ms 384 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 3 ms 384 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 3 ms 384 KB Output is correct
7 Correct 3 ms 384 KB Output is correct
8 Correct 2 ms 384 KB Output is correct
9 Correct 2 ms 384 KB Output is correct
10 Correct 1 ms 384 KB Output is correct
11 Correct 2 ms 384 KB Output is correct
12 Correct 3 ms 384 KB Output is correct
13 Correct 3 ms 384 KB Output is correct
14 Correct 2 ms 512 KB Output is correct
15 Correct 2 ms 384 KB Output is correct
16 Correct 2 ms 384 KB Output is correct
17 Correct 3 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 384 KB Output is correct
2 Correct 3 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 3 ms 384 KB Output is correct
6 Correct 2 ms 384 KB Output is correct
7 Correct 3 ms 380 KB Output is correct
8 Correct 3 ms 384 KB Output is correct
9 Correct 2 ms 384 KB Output is correct
10 Correct 4 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 1280 KB Output is correct
2 Correct 14 ms 4224 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 9 ms 3200 KB Output is correct
5 Correct 14 ms 4096 KB Output is correct
6 Correct 2 ms 384 KB Output is correct
7 Correct 4 ms 896 KB Output is correct
8 Correct 4 ms 1280 KB Output is correct
9 Correct 2 ms 356 KB Output is correct
10 Correct 13 ms 4480 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 384 KB Output is correct
2 Correct 3 ms 412 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 3 ms 512 KB Output is correct
6 Correct 4 ms 384 KB Output is correct
7 Correct 3 ms 384 KB Output is correct
8 Correct 4 ms 384 KB Output is correct
9 Correct 2 ms 384 KB Output is correct
10 Correct 3 ms 384 KB Output is correct
11 Correct 3 ms 384 KB Output is correct
12 Correct 2 ms 384 KB Output is correct
13 Correct 3 ms 384 KB Output is correct
14 Correct 2 ms 384 KB Output is correct
15 Correct 3 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 352 KB Output is correct
2 Correct 3 ms 384 KB Output is correct
3 Correct 3 ms 384 KB Output is correct
4 Correct 3 ms 384 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 2 ms 384 KB Output is correct
7 Correct 3 ms 384 KB Output is correct
8 Correct 2 ms 384 KB Output is correct
9 Correct 2 ms 512 KB Output is correct
10 Correct 2 ms 384 KB Output is correct
11 Incorrect 5 ms 2224 KB Output isn't correct
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Correct 3 ms 384 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 2 ms 384 KB Output is correct
7 Correct 2 ms 384 KB Output is correct
8 Correct 2 ms 384 KB Output is correct
9 Correct 2 ms 384 KB Output is correct
10 Correct 2 ms 384 KB Output is correct
11 Correct 2 ms 384 KB Output is correct
12 Runtime error 92 ms 17408 KB Execution killed with signal 9 (could be triggered by violating memory limits)
13 Halted 0 ms 0 KB -