E Why WA#2
  • 板块学术版
  • 楼主Vitamin_B
  • 当前回复10
  • 已保存回复10
  • 发布时间2024/9/28 00:05
  • 上次更新2024/9/28 10:36:49
查看原帖
E Why WA#2
743373
Vitamin_B楼主2024/9/28 00:05

rt,寄大分。

# include <bits/stdc++.h>

# define I return

# define AK 0

# define IOI ;

using namespace std;

typedef long long ll;

typedef pair <int, int> pii;

int t, n, x, y, depth[500005], maxdep[500005], l, r, mid1, mid2, minx;

vector <int> v[500005];

void init (const int x, const int f) {

	r = max (r, maxdep[x] = depth[x] = depth[f] + 1);

	for (const int& i : v[x])
		if (i != f)
			init (i, x), maxdep[x] = max (maxdep[x], maxdep[i]);

	return ;

}

int check (const int mid) {

	int sum = 0;
//	cerr << mid << ':';
	for (int i = 2; i <= n; ++ i)
		if (depth[i] > mid || maxdep[i] < mid)
			++ sum;
//	for (int i = 2; i <= n; ++ i) cerr << i << ':' << depth[i] << ',' << maxdep[i] << ':' << (depth[i] > mid || maxdep[i] < mid) << '\n';
//	for (const int& i : v[1]) cerr << i << ':' << maxdep[i] << ',' << s[i] << '\n';
//	cerr << sum << '\n';
	return sum;

}

int main () {

	ios::sync_with_stdio (0);

	cin.tie (0);

	cout.tie (0);

	cin >> t;

	while (t --) {

		cin >> n;

		for (int i = 1; i <= n; ++ i)
			v[i].clear ();

		for (int i = 1; i < n; ++ i)
			cin >> x >> y, v[x].emplace_back (y), v[y].emplace_back (x);

		l = r = 1, init (1, 0);
//		cerr << check (3) << '\n';
//		I AK IOI
//		cerr << l << '~' << r << '\n';
//		for (int i = 1; i <= 4; ++ i) cerr << i << ':' << check (i) << '\n';
//		for (int i = 1; i <= n; ++ i) cerr << i << ':' << depth[i] << ',' << maxdep[i] << '\n';
//		I AK IOI
		while (r - l > 2) {

			mid1 = l + (r - l) / 3, mid2 = r - (r - l) / 3;
//			cerr << l << '~' << r << ':' << mid1 << ',' << mid2 << '\n';
			if (check (mid1) > check (mid2))
				l = mid1;
			else
				r = mid2;

		}

		minx = n - 1;

		for (int i = l; i <= r; ++ i)
			minx = min (minx, check (i));

		cout << minx << '\n';

	}

	I AK IOI

}
/*
1
7
1 2
1 3
2 4
2 5
4 6
4 7
*/
2024/9/28 00:05
加载中...