Submission #285849

# Submission time Handle Problem Language Result Execution time Memory
285849 2020-08-29T16:31:17 Z Saboon Friend (IOI14_friend) C++14
100 / 100
59 ms 8440 KB
#include "friend.h"
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
const int inf = 1e9;

int n, V[maxn], c[4*maxn];
short type[4*maxn];
int m = 0;
int last[4*maxn], pre[4*maxn], to[4*maxn];
int par[maxn];

pair<int,int> dfs(int v){
	if (type[v] == 1){
		int lc = to[pre[last[v]]], rc = to[last[v]];
		auto it1 = dfs(lc);
		auto it2 = dfs(rc);
		return {max(it1.first+it2.second,it1.second+it2.first),it1.second+it2.first};
	}
	else if (type[v] == 0){
		int dp = c[v], pd = 0;
		while (last[v] != -1){
			int u = to[last[v]];
			auto it = dfs(u);
			dp += it.first, pd += it.second;
			last[v] = pre[last[v]];
		}
		dp = max(dp,pd);
		return {dp,pd};
	}
	else{
		int lc = to[pre[last[v]]], rc = to[last[v]];
		auto it1 = dfs(lc);
		auto it2 = dfs(rc);
		int dp = max(it1.first+it2.second, it1.second+it2.first);
		int pd = it1.second+it2.second;
		dp = max(dp,pd);
		return {max({it1.first+it2.second,it1.second+it2.first,it1.second+it2.second}),it1.second+it2.second};
	}
}

void addEdge(int v, int u){
	pre[m] = last[v], to[m] = u, last[v] = m++;
}

int findSample(int N,int confidence[],int host[],int protocol[]){
	memset(last, -1, sizeof last);
	n = N;
	if (*min_element(protocol+1, protocol+n) == 2 and *max_element(protocol+1, protocol+n) == 2)
		return *max_element(confidence, confidence+n);
	int newint = n+1;
	addEdge(0, 1);
	V[0] = 1;
	c[1] = confidence[0];
	for (int i = 1; i < n; i++){
		int v = V[host[i]];
		if (protocol[i] == 0){
			c[v] = 0;
			type[v] = 1;
			addEdge(v, newint++);
			addEdge(newint-1, newint);
			par[host[i]] = newint-1;
			V[host[i]] = newint++;
			
			addEdge(v, newint++);
			addEdge(newint-1, newint);
			par[i] = newint-1;
			V[i] = newint++;
			c[V[i]] = confidence[i];
			c[V[host[i]]] = confidence[host[i]];
		}
		else if (protocol[i] == 1){
			addEdge(par[host[i]], newint);
			par[i] = par[host[i]];
			V[i] = newint++;
			c[V[i]] = confidence[i];
		}
		else{
			c[v] = 0;
			type[v] = 2;
			addEdge(v, newint++);
			addEdge(newint-1, newint);
			par[host[i]] = newint-1;
			V[host[i]] = newint++;

			addEdge(v, newint++);
			addEdge(newint-1, newint);
			par[i] = newint-1;
			V[i] = newint++;
			c[V[i]] = confidence[i];
			c[V[host[i]]] = confidence[host[i]];
		}
	}
	return dfs(0).first;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 1920 KB Output is correct
2 Correct 1 ms 2048 KB Output is correct
3 Correct 1 ms 1920 KB Output is correct
4 Correct 1 ms 1920 KB Output is correct
5 Correct 2 ms 1920 KB Output is correct
6 Correct 1 ms 1920 KB Output is correct
7 Correct 1 ms 1920 KB Output is correct
8 Correct 1 ms 1920 KB Output is correct
9 Correct 1 ms 1792 KB Output is correct
10 Correct 1 ms 1920 KB Output is correct
11 Correct 2 ms 1920 KB Output is correct
12 Correct 2 ms 1920 KB Output is correct
13 Correct 1 ms 1920 KB Output is correct
14 Correct 1 ms 1920 KB Output is correct
15 Correct 1 ms 1920 KB Output is correct
16 Correct 1 ms 1920 KB Output is correct
17 Correct 1 ms 2048 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 1920 KB Output is correct
2 Correct 1 ms 1920 KB Output is correct
3 Correct 1 ms 1920 KB Output is correct
4 Correct 2 ms 1920 KB Output is correct
5 Correct 2 ms 1920 KB Output is correct
6 Correct 2 ms 1920 KB Output is correct
7 Correct 2 ms 1920 KB Output is correct
8 Correct 2 ms 1920 KB Output is correct
9 Correct 2 ms 1920 KB Output is correct
10 Correct 2 ms 1920 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 1920 KB Output is correct
2 Correct 2 ms 1920 KB Output is correct
3 Correct 1 ms 1920 KB Output is correct
4 Correct 2 ms 1920 KB Output is correct
5 Correct 2 ms 1920 KB Output is correct
6 Correct 2 ms 1860 KB Output is correct
7 Correct 1 ms 1920 KB Output is correct
8 Correct 1 ms 1920 KB Output is correct
9 Correct 1 ms 1920 KB Output is correct
10 Correct 2 ms 1920 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 1920 KB Output is correct
2 Correct 1 ms 1920 KB Output is correct
3 Correct 2 ms 1920 KB Output is correct
4 Correct 1 ms 1920 KB Output is correct
5 Correct 2 ms 2048 KB Output is correct
6 Correct 2 ms 2048 KB Output is correct
7 Correct 2 ms 1920 KB Output is correct
8 Correct 2 ms 2048 KB Output is correct
9 Correct 2 ms 1920 KB Output is correct
10 Correct 2 ms 1920 KB Output is correct
11 Correct 2 ms 1920 KB Output is correct
12 Correct 2 ms 2048 KB Output is correct
13 Correct 2 ms 2048 KB Output is correct
14 Correct 1 ms 1920 KB Output is correct
15 Correct 2 ms 2048 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 1920 KB Output is correct
2 Correct 1 ms 1920 KB Output is correct
3 Correct 1 ms 1920 KB Output is correct
4 Correct 1 ms 1920 KB Output is correct
5 Correct 1 ms 1920 KB Output is correct
6 Correct 1 ms 1920 KB Output is correct
7 Correct 1 ms 1920 KB Output is correct
8 Correct 1 ms 1920 KB Output is correct
9 Correct 2 ms 2048 KB Output is correct
10 Correct 2 ms 1920 KB Output is correct
11 Correct 2 ms 1920 KB Output is correct
12 Correct 2 ms 1920 KB Output is correct
13 Correct 2 ms 1920 KB Output is correct
14 Correct 2 ms 2048 KB Output is correct
15 Correct 2 ms 1920 KB Output is correct
16 Correct 1 ms 1920 KB Output is correct
17 Correct 1 ms 1920 KB Output is correct
18 Correct 2 ms 1920 KB Output is correct
19 Correct 1 ms 1920 KB Output is correct
20 Correct 2 ms 1920 KB Output is correct
21 Correct 2 ms 1920 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 1920 KB Output is correct
2 Correct 1 ms 1920 KB Output is correct
3 Correct 1 ms 1920 KB Output is correct
4 Correct 1 ms 1920 KB Output is correct
5 Correct 1 ms 1920 KB Output is correct
6 Correct 1 ms 1920 KB Output is correct
7 Correct 1 ms 1920 KB Output is correct
8 Correct 1 ms 1920 KB Output is correct
9 Correct 1 ms 2048 KB Output is correct
10 Correct 1 ms 1920 KB Output is correct
11 Correct 1 ms 1920 KB Output is correct
12 Correct 59 ms 8060 KB Output is correct
13 Correct 26 ms 5624 KB Output is correct
14 Correct 48 ms 8440 KB Output is correct
15 Correct 48 ms 8440 KB Output is correct