Submission #2698383


Source Code Expand

#include "bits/stdc++.h"
using namespace std;
#define MAX 100002
int n;
vector<int> v[MAX];
int dp[MAX],cnt[MAX];
multiset<int> vv[MAX];
multiset<int> tmp[MAX];

bool can;
int mx;
vector<int> unf[MAX];
int C;
inline void dfs(int b, int pr = -1) {
	vv[b].clear();
	unf[b].clear();
	int deg = 0;
	for (int go : v[b]) {
		if (go == pr)continue;
		dfs(go, b);
		deg++;
		vv[b].insert(dp[go] + 1);
	}
	tmp[b] = vv[b];
	C += deg/2;
	if (deg % 2 && b == 0) {
		C++;
	}
	if (vv[b].size()) {
		int la = (*vv[b].rbegin());
		if (la > mx) {
			can = true;
			dp[b] = 0;
			return;
		}
	}
	while (vv[b].size() > 1) {
		int bc = *vv[b].rbegin();
		vv[b].erase(prev(vv[b].end()));
		int able = mx - bc;
		auto it = vv[b].upper_bound(able);
		if (it == vv[b].begin()) {
			unf[b].push_back(bc);
			continue;
		}
		it = prev(it);
		vv[b].erase(it);
	}
	if (vv[b].size()) {
		unf[b].push_back(*vv[b].begin());
	}
	vv[b].clear();
	if (deg%2&&unf[b].size() > 1) {
		can = true;
		dp[b] = 0;
		return;
	}
	if (deg % 2) {
		dp[b] = unf[b][0];
		return;
	}
	else {
		if (unf[b].size() == 0) {
			dp[b] = 0;
			return;
		}
		else {
			if (b == 0) {
				can = true;
				dp[b] = 0;
				return;
			}
			vv[b] = tmp[b];
			unf[b].clear();
			vv[b].erase(prev(vv[b].end()));
			while (vv[b].size() > 1) {
				int bc = *vv[b].rbegin();
				vv[b].erase(prev(vv[b].end()));
				int able = mx - bc;
				auto it = vv[b].upper_bound(able);
				if (it == vv[b].begin()) {
					unf[b].push_back(bc);
					continue;
				}
				it = prev(it);
				vv[b].erase(it);
			}
			if (vv[b].size()) {
				unf[b].push_back(*vv[b].begin());
			}
			if (unf[b].size() == 1) {
				dp[b] = unf[b][0];
				return;
			}
			can = true;
			dp[b] = 0;
			return;
		}
	}
}
bool ok(int len) {
	can = false;
	mx = len;
	C = 0;
	dfs(0);
	return can == false;
}
int main() {
	cin >> n;
	for (int i = 1; i < n; i++) {
		int a, b;
		scanf("%d%d", &a, &b);
		a--;
		b--;
		v[a].push_back(b);
		v[b].push_back(a);
	}
	int mint = 1;
	int maxt = n;
	while (mint + 1 < maxt) {
		int mid = (mint + maxt) >> 1;
		if (ok(mid)) {
			maxt = mid;
		}
		else {
			mint = mid + 1;
		}
	}
	if (ok(mint)) {
		ok(mint);
		cout <<C<<" "<< mint << endl;
	}
	else {
		ok(maxt);
		cout << C<<" "<<maxt << endl;
	}
	return 0;
}

Submission Info

Submission Time
Task F - Christmas Tree
User fxt
Language C++14 (GCC 5.4.1)
Score 900
Code Size 2380 Byte
Status AC
Exec Time 560 ms
Memory 38016 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:112:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &a, &b);
                        ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 900 / 900
Status
AC × 3
AC × 75
Set Name Test Cases
Sample s1.txt, s2.txt, s3.txt
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, 41.txt, 42.txt, 43.txt, 44.txt, 45.txt, 46.txt, 47.txt, 48.txt, 49.txt, 50.txt, 51.txt, 52.txt, 53.txt, 54.txt, 55.txt, 56.txt, 57.txt, 58.txt, 59.txt, 60.txt, 61.txt, 62.txt, 63.txt, 64.txt, 65.txt, 66.txt, 67.txt, 68.txt, 69.txt, 70.txt, 71.txt, 72.txt, s1.txt, s2.txt, s3.txt
Case Name Status Exec Time Memory
01.txt AC 401 ms 24320 KB
02.txt AC 389 ms 24320 KB
03.txt AC 392 ms 24192 KB
04.txt AC 391 ms 24320 KB
05.txt AC 545 ms 36096 KB
06.txt AC 560 ms 38016 KB
07.txt AC 498 ms 28416 KB
08.txt AC 509 ms 31104 KB
09.txt AC 515 ms 29312 KB
10.txt AC 522 ms 31872 KB
11.txt AC 381 ms 24832 KB
12.txt AC 359 ms 24960 KB
13.txt AC 366 ms 24960 KB
14.txt AC 373 ms 25600 KB
15.txt AC 489 ms 24320 KB
16.txt AC 466 ms 26112 KB
17.txt AC 438 ms 25856 KB
18.txt AC 433 ms 25984 KB
19.txt AC 414 ms 25984 KB
20.txt AC 408 ms 26240 KB
21.txt AC 426 ms 26496 KB
22.txt AC 480 ms 27392 KB
23.txt AC 543 ms 35968 KB
24.txt AC 534 ms 35200 KB
25.txt AC 398 ms 24320 KB
26.txt AC 398 ms 26112 KB
27.txt AC 409 ms 25856 KB
28.txt AC 411 ms 25984 KB
29.txt AC 390 ms 25984 KB
30.txt AC 397 ms 26112 KB
31.txt AC 414 ms 26496 KB
32.txt AC 455 ms 27648 KB
33.txt AC 550 ms 35712 KB
34.txt AC 549 ms 34176 KB
35.txt AC 449 ms 24192 KB
36.txt AC 382 ms 23296 KB
37.txt AC 413 ms 24320 KB
38.txt AC 418 ms 25344 KB
39.txt AC 409 ms 25728 KB
40.txt AC 415 ms 26112 KB
41.txt AC 403 ms 26368 KB
42.txt AC 439 ms 27904 KB
43.txt AC 538 ms 31616 KB
44.txt AC 533 ms 31360 KB
45.txt AC 434 ms 24192 KB
46.txt AC 416 ms 24320 KB
47.txt AC 422 ms 24320 KB
48.txt AC 543 ms 25344 KB
49.txt AC 509 ms 25728 KB
50.txt AC 557 ms 26112 KB
51.txt AC 425 ms 26496 KB
52.txt AC 448 ms 27136 KB
53.txt AC 499 ms 30208 KB
54.txt AC 527 ms 33408 KB
55.txt AC 509 ms 28536 KB
56.txt AC 483 ms 28536 KB
57.txt AC 500 ms 28024 KB
58.txt AC 465 ms 28024 KB
59.txt AC 461 ms 28800 KB
60.txt AC 454 ms 27904 KB
61.txt AC 459 ms 28288 KB
62.txt AC 457 ms 28800 KB
63.txt AC 467 ms 29312 KB
64.txt AC 507 ms 32764 KB
65.txt AC 494 ms 31992 KB
66.txt AC 533 ms 31484 KB
67.txt AC 7 ms 15104 KB
68.txt AC 7 ms 15104 KB
69.txt AC 7 ms 15104 KB
70.txt AC 7 ms 15104 KB
71.txt AC 7 ms 15104 KB
72.txt AC 7 ms 15104 KB
s1.txt AC 7 ms 15104 KB
s2.txt AC 7 ms 15104 KB
s3.txt AC 7 ms 15104 KB