234762026-01-23 16:45:25matemakaiParti (75 pont)cpp17Accepted 75/75193ms9304 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
	int n;
	cin >> n;
	vector<pair<int, int>> adj(n);
	for (int i = 0; i < n; ++i) {
		int a, b;
		cin >> a >> b;
		--a;
		--b;
		adj[i] = {a, b};
	}

	vector<int> indegree(n);

	for (int i = 0; i < n; ++i) {
		++indegree[adj[i].first];
		++indegree[adj[i].second];
	}

	set<int> nums, update;

	for (int i = 0; i < n; ++i) {
		nums.insert(i);
		if (indegree[i] < 2) {
			update.insert(i);
		}
	}

	while (!update.empty()) {
		int node = *(update.begin());
		update.erase(update.begin());

		if (nums.count(node) && indegree[node] < 2) {
			nums.erase(node);
			--indegree[adj[node].first];
			--indegree[adj[node].second];
			if (nums.count(adj[node].first)) {
				update.insert(adj[node].first);
			}
			if (nums.count(adj[node].second)) {
				update.insert(adj[node].second);
			}
		}
	}

	cout << nums.size() << endl;
	for (auto a : nums) {
		cout << a + 1 << " ";
	}
	cout << endl;
}
SubtaskSumTestVerdictTimeMemory
base75/75
1Accepted0/01ms316 KiB
2Accepted0/090ms4912 KiB
3Accepted3/31ms316 KiB
4Accepted3/31ms316 KiB
5Accepted3/31ms316 KiB
6Accepted3/31ms312 KiB
7Accepted3/31ms316 KiB
8Accepted4/42ms508 KiB
9Accepted4/42ms316 KiB
10Accepted4/43ms316 KiB
11Accepted4/42ms316 KiB
12Accepted4/44ms436 KiB
13Accepted4/44ms564 KiB
14Accepted4/46ms564 KiB
15Accepted4/486ms4684 KiB
16Accepted4/4108ms5856 KiB
17Accepted4/4127ms6576 KiB
18Accepted4/4156ms7620 KiB
19Accepted4/4167ms8244 KiB
20Accepted4/4192ms9304 KiB
21Accepted4/4193ms9248 KiB
22Accepted4/41ms316 KiB