제출 #856895

#제출 시각아이디문제언어결과실행 시간메모리
856895MikolajKolek새로운 문제 (POI13_luk)C++17
30 / 100
175 ms23124 KiB
#include <bits/stdc++.h>

using namespace std;

void BFS(const vector<vector<int>> &G, vector<bool> &vis, vector<int> &res) {
	//Index, sum, layer
	queue<tuple<int, int, int>> q;
	q.push({0, 0, 0});
	res[0] = 0;

	while(!q.empty()) {
		auto [index, sum, layer] = q.front();
		q.pop();
		vis[index] = true; sum += G[index].size() - 1; layer++;

		int answer = max((sum + layer - 1) / layer, res[index]);
		//int answer = max(ceil(sum / layer), res[index]);
		for(const auto &element : G[index]) {
			if(!vis[element]) {
				q.push({element, sum, layer});
				res[element] = answer;
			}
		}
	}
}

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

	int n = *istream_iterator<int>(cin);
	vector<vector<int>> G(n, vector<int>());
	G[0].push_back(0);
	for(int i = 0; i < n - 1; i++) {
		int a = *istream_iterator<int>(cin), b = *istream_iterator<int>(cin); 

		G[a - 1].push_back(b - 1);
		G[b - 1].push_back(a - 1);
	}

	vector<bool> vis(n, false);
	vector<int> res(n);
	BFS(G, vis, res);

	cout << *max_element(res.begin(), res.end());

	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...