第5题并查集 vector<int> meituan5() { int n, m; cin >> n; vector<int> tree(n + 1, 0); vector<int> weights(n + 1, 0); for (int i = 2; i <= n; ++i) { cin >> tree[i]; } for (int i = 1; i <= n; ++i) { cin >> weights[i]; } cin >> m; vector<vector<int>> requests(m, vector<int>(2)); for (int i = 0; i < m; ++i) cin >> requests[i][0]; for (int i = 0; i < m; ++i) cin >> requests[i][1]; vector<int> res(m); int beg, end, currNode, val; for (int i = 0; i < m; ++i) { beg = requests[i][0]; end = requests[i][1]; currNode = beg; val = 0; while (currNode != 1 && currNode != end) { val ^= weights[currNode]; currNode = tree[currNode]; } if (currNode == 1) { currNode = end; while (currNode != 1) { val ^= weights[currNode]; currNode = tree[currNode]; } val ^= weights[1]; } else { val ^= weights[end]; } res[i] = val; } return res; }