답안 #582334

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
582334 2022-06-23T16:33:03 Z Josia 친구 (IOI14_friend) C++14
46 / 100
25 ms 6052 KB
#include <bits/stdc++.h>
#include "friend.h"

using namespace std;




pair<int, int> dfs(int v, vector<vector<int>> &graph, vector<bool> &visited, vector<int> &val) {
	if (visited[v]) return {0, 0};
	visited[v] = 1;

	pair<int, int> res = {val[v], 0};

	for (int i: graph[v]) {
		pair<int, int> tmp = dfs(i, graph, visited, val);
		res.first += tmp.second;
		res.second += tmp.first;
	}

	res.first = max(res.first, res.second);
	return res;
}





// Find out best sample
int findSample(int n,int confidence[],int host[],int protocol[]){
	vector<set<int>> friends(n);
	if (n<=10) {
		for (int i = 1; i<n; i++) {
			int v = host[i];
			int type = protocol[i];
			// int value = confidence[i];

			if (type == 0) {
				for (int j = 0; j<i; j++) {
					if (j == v) {
						friends[i].insert(j);
						friends[j].insert(i);
						// friendGraph[j].push_back(i);
						// friendGraph[i].push_back(j);
						continue;
					}
				}
			}
			if (type == 1) {
				for (int j = 0; j<i; j++) {
					if (friends[v].count(j)) {
						friends[i].insert(j);
						friends[j].insert(i);
						// friendGraph[j].push_back(i);
						// friendGraph[i].push_back(j);
						continue;
					}
				}
			}
			if (type == 2) {
				for (int j = 0; j<i; j++) {
					if (friends[v].count(j) || j == v) {
						friends[i].insert(j);
						friends[j].insert(i);
						// friendGraph[j].push_back(i);
						// friendGraph[i].push_back(j);					
						continue;
					}
				}
			}
		}

		int res = 0;
		for (int i = 0; i<(1<<n); i++) {
			int tmp = 0;
			vector<int> nodes;
			for (int j = 0; j<n; j++) {
				if (i & (1<<j)) nodes.push_back(j);
			}
			bool poss = 1;
			for (int i: nodes) {
				for (int j: nodes) {
					if (friends[i].count(j)) poss = 0;
				}
			}
			if (!poss) continue;

			for (int i: nodes) {
				tmp += confidence[i];
			}
			res = max(res, tmp);

		}
		return res;
	}


	int res = 0;
	if (protocol[1] == 1) {
		for (int i = 0; i<n; i++) {
			res += confidence[i];
		}
	}
	if (protocol[1] == 2) {
		for (int i = 0; i<n; i++) {
			res = max(res, confidence[i]);
		}
	}
	if (protocol[1] == 0) {
		vector<int> val;
		for (int i = 0; i<n; i++) val.push_back(confidence[i]);
		vector<vector<int>> graph(n);

		for (int i = 1; i<n; i++) {
			graph[i].push_back(host[i]);
			graph[host[i]].push_back(i);
		}
		vector<bool> visited(n, 0);
		return dfs(0, graph, visited, val).first;
	}

	return res;

}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 468 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 304 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 1 ms 424 KB Output is correct
14 Correct 0 ms 340 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 1 ms 468 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Incorrect 1 ms 340 KB Output isn't correct
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Incorrect 25 ms 6052 KB Output isn't correct
13 Halted 0 ms 0 KB -