40pts TLE,求做法
查看原帖
40pts TLE,求做法
857786
MhxMa楼主2024/7/9 18:55

直接遍历 4040 pts,subtask1 和 subtask3 都没过,TLE

求调,顺便讲下优化思路

#include<bits/stdc++.h>
using namespace std;
struct node {
	int color;
	int leftson, rightson;
} tree[100005];
int n, m;
string s;
void dfs(int x) {
	if (tree[x].color == 1) {
		tree[x].color = 0;
	} else {
		tree[x].color = 1;
	}
	if (tree[x].leftson != 0) {
		dfs(tree[x].leftson);
	}
	if (tree[x].rightson != 0) {
		dfs(tree[x].rightson);
	}
	return ;
}
bool fl = 1;
int vis[100005];
int main() {
	scanf("%d", &n);
	for (int i = 2; i <= n; i++) {
		int k;
		scanf("%d", &k);
		if (tree[k].leftson == 0) {
			tree[k].leftson = i;
		} else {
			tree[k].rightson = i;
		}
		if (k != i + 1) {
			fl = 0;
		}
	}

	cin >> s;
	for (int i = 1; i <= n; i++) {
		tree[i].color = s[i - 1] - '0';
	}
	scanf("%d", &m);
	if (fl) { // 特殊性质
		while (m--) {
			int v;
			scanf("%d", &v);
			vis[v] += 1;
		}
		for (int i = 1; i <= n; i++) {
			vis[i] += vis[i - 1];
			cout << (tree[i].color + vis[i]) % 2;
		}
		return 0;
	}
	while (m--) {
		int v;
		scanf("%d", &v);
		dfs(v);
	}
	for (int i = 1; i <= n; i++) {
		cout << tree[i].color;
	}
	return 0;
}

玄关

2024/7/9 18:55
加载中...