Submission #88631

#TimeUsernameProblemLanguageResultExecution timeMemory
88631GogotchuriTriumphal arch (POI13_luk)C++14
100 / 100
1138 ms38212 KiB
#include <iostream>
#include <vector>

using namespace std;

#define MAX_NUM 300001
#define vi vector<int>
#define loop(n) for(int i = 0; i < (n); i++)
#define it_loop(cont) for(auto &elem : cont)

void read(vi * graph, int &n_nodes) {
	cin >> n_nodes;

	loop(n_nodes - 1) {
		int node1, node2;
		cin >> node1 >> node2;
		graph[node1].emplace_back(node2);
		graph[node2].emplace_back(node1);
	}

}

void depth_first(int cur, int prev, int &m, int *memo, vi * graph) {
	memo[cur] = m - (int)graph[cur].size();
	memo[cur] += (prev) ? 1 : 0;

	it_loop(graph[cur]) {
		if (elem == prev) continue;
		depth_first(elem, cur, m, memo, graph);
		if (memo[elem] < 0) memo[cur] += memo[elem];
	}
}

int b_search(int n_nodes, int &cur_node, int *memo, vi *graph) {
	int start_node = 0, end_node = n_nodes;

	while (start_node < end_node) {
		int m = (start_node + end_node) >> 1;
		cur_node = m;
		depth_first(1, 0, cur_node, memo, graph);
		memo[1] < 0 ? start_node = m + 1 : end_node = m;
	}

	return start_node;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	int n_nodes, cur_node, *memo;
	memo = new int[MAX_NUM];

	vi * graph = new vi[MAX_NUM];

	read(graph, n_nodes);
	cout << b_search(n_nodes, cur_node, memo, graph) << endl;
	
	delete[] memo;
	delete[] graph;

	return 0;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...