提出 #57139107


ソースコード 拡げる

#include <vector>
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
int main() {
	cin.tie(0);
	ios_base::sync_with_stdio(false);
	int N, K;
	cin >> N >> K;
	if (N == 1) {
	    cout << 1 << '\n';
	    return 0;
	}
	vector<vector<int> > G(N);
	for (int i = 0; i < N - 1; ++i) {
		int A, B;
		cin >> A >> B; --A, --B;
		G[A].push_back(B);
		G[B].push_back(A);
	}
	int bits = 0;
	while ((1 << bits) < N) ++bits;
	vector<vector<int> > par(bits, vector<int>(N));
	vector<int> depth(N), id(N);
	int vert_id = 0;
	function<void(int, int)> build_tree = [&](int pos, int pre) {
		par[0][pos] = pre;
		id[pos] = vert_id++;
		for (int i : G[pos]) {
			if (i == pre) continue;
			depth[i] = depth[pos] + 1;
			build_tree(i, pos);
		}
	};
	build_tree(0, 0);
	for (int i = 1; i < bits; ++i) {
		for (int j = 0; j < N; ++j) {
			par[i][j] = par[i - 1][par[i - 1][j]];
		}
	}
	function<int(int, int)> lca = [&](int va, int vb) {
		if (depth[va] < depth[vb]) swap(va, vb);
		for (int i = bits - 1; i >= 0; --i) {
			if (depth[va] - depth[vb] >= (1 << i)) {
				va = par[i][va];
			}
		}
		if (va == vb) return va;
		for (int i = bits - 1; i >= 0; --i) {
			if (par[i][va] != par[i][vb]) {
				va = par[i][va];
				vb = par[i][vb];
			}
		}
		return par[0][va];
	};
	int Q = 1;
	//cin >> Q;
	for (int i = 0; i < Q; ++i) {
		int verts = K;
		//cin >> verts;
		vector<int> sel(verts);
		for (int j = 0; j < verts; ++j) {
			cin >> sel[j];
			--sel[j];
		}
		sort(sel.begin(), sel.end(), [&](int va, int vb) {
			return id[va] < id[vb];
			});
		int answer = 0;
		for (int j = 0; j < verts; ++j) {
			answer += depth[sel[j]];
			answer -= depth[lca(sel[j], sel[(j + 1) % verts])];
		}
		cout << answer + 1 << '\n';
	}
	return 0;
}

提出情報

提出日時
問題 D - Minimum Steiner Tree
ユーザ kaichou243
言語 C++ 20 (gcc 12.2)
得点 425
コード長 1820 Byte
結果 AC
実行時間 106 ms
メモリ 46024 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 425 / 425
結果
AC × 3
AC × 37
セット名 テストケース
Sample sample_01.txt, sample_02.txt, sample_03.txt
All min.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, random_27.txt, random_28.txt, random_29.txt, random_30.txt, random_31.txt, random_32.txt, random_33.txt, sample_01.txt, sample_02.txt, sample_03.txt
ケース名 結果 実行時間 メモリ
min.txt AC 1 ms 3460 KiB
random_01.txt AC 64 ms 29784 KiB
random_02.txt AC 63 ms 29836 KiB
random_03.txt AC 79 ms 46024 KiB
random_04.txt AC 76 ms 40688 KiB
random_05.txt AC 52 ms 30488 KiB
random_06.txt AC 51 ms 30620 KiB
random_07.txt AC 60 ms 30640 KiB
random_08.txt AC 65 ms 30632 KiB
random_09.txt AC 72 ms 29776 KiB
random_10.txt AC 69 ms 29820 KiB
random_11.txt AC 87 ms 29960 KiB
random_12.txt AC 90 ms 30192 KiB
random_13.txt AC 106 ms 30300 KiB
random_14.txt AC 4 ms 4640 KiB
random_15.txt AC 4 ms 4364 KiB
random_16.txt AC 23 ms 13164 KiB
random_17.txt AC 61 ms 27792 KiB
random_18.txt AC 23 ms 13460 KiB
random_19.txt AC 55 ms 26580 KiB
random_20.txt AC 49 ms 24960 KiB
random_21.txt AC 43 ms 22036 KiB
random_22.txt AC 49 ms 24972 KiB
random_23.txt AC 39 ms 19668 KiB
random_24.txt AC 60 ms 29776 KiB
random_25.txt AC 61 ms 29780 KiB
random_26.txt AC 62 ms 29740 KiB
random_27.txt AC 61 ms 29724 KiB
random_28.txt AC 61 ms 29728 KiB
random_29.txt AC 10 ms 8100 KiB
random_30.txt AC 6 ms 5460 KiB
random_31.txt AC 18 ms 11588 KiB
random_32.txt AC 10 ms 8152 KiB
random_33.txt AC 55 ms 27176 KiB
sample_01.txt AC 1 ms 3404 KiB
sample_02.txt AC 1 ms 3328 KiB
sample_03.txt AC 1 ms 3428 KiB