35 pts 用栈求助
查看原帖
35 pts 用栈求助
688783
SilverLi楼主2023/6/20 17:13
#include <iostream>
#include <string>
#include <vector>
#include <stack>
using namespace std;
const int N = 5e5 + 5;
int n, f[N];
int sum[N];
string s;
vector<int> g[N];
void dfs(int u, int ft, stack<int> sta) {
	if (s[u] == ')')
		if (!sta.empty()) {
			f[u] = f[sta.top() - 1] + 1;
			sta.pop();
		}
	if (s[u] == '(')	sta.push(u);
	sum[u] = sum[ft] + f[u];
	for (int l = 0; l < g[u].size(); ++l) {
		int i = g[u][l];
		dfs(i, u, sta);
	}
}
signed main() {
	cin >> n >> s;
	s = ' ' + s;
	for (int i = 2; i <= n; ++i) {
		int fa;
		cin >> fa;
		g[fa].push_back(i);
	}
    stack<int> sta;
	dfs(1, 0, sta);
	int ans = 0;
	for (int i = 1; i <= n; ++i)
		ans ^= i * sum[i];
	cout << ans;
	return 0;
}
2023/6/20 17:13
加载中...