Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cstring>
- #include <deque>
- int depths[200000];
- int parents[200000];
- int ans[200000];
- std::vector<std::vector<int>> g(200000);
- int n, m;
- void travel(int root, int parent, int depth) {
- for (int child : g[root]) {
- if (child != parent) {
- depths[child] = depth + 1;
- parents[child] = root;
- travel(child, root, depth + 1);
- }
- }
- }
- int main() {
- std::ios_base::sync_with_stdio(false);
- std::cin >> n >> m;
- for (int i = 0; i < n - 1; i++) {
- int a, b;
- std::cin >> a >> b;
- g[a-1].push_back(b-1);
- g[b-1].push_back(a-1);
- }
- std::memset(depths, 0, sizeof(int) * n);
- std::memset(parents, -1, sizeof(int) * n);
- travel(0, -1, 0);
- for (int i = 0; i < m; i++) {
- int k;
- std::cin >> k;
- bool possible = true;
- std::memset(ans, -1, sizeof(int) * n);
- for (int j = 0; j < k; j++) {
- int v;
- std::cin >> v;
- if (!possible) {
- continue;
- }
- int parent = parents[v-1];
- //std::cout << "search for " << v << std::endl;
- while(parent != -1) {
- //std::cout << "parent " << parent << std::endl;
- int d = depths[parent];
- if (ans[d] != -1) {
- if (ans[d] != parent) {
- possible = false;
- }
- break;
- }
- ans[d] = parent;
- parent = parents[parent];
- }
- }
- if (possible) {
- std::cout << "YES" << std::endl;
- } else {
- std::cout << "NO" << std::endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement