QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#376225#7736. Red Black Treewtz2333WA 166ms35716kbC++171.3kb2024-04-04 00:08:302024-04-04 00:08:30

Judging History

你现在查看的是最新测评结果

  • [2024-04-04 00:08:30]
  • 评测
  • 测评结果:WA
  • 用时:166ms
  • 内存:35716kb
  • [2024-04-04 00:08:30]
  • 提交

answer

#include<bits/stdc++.h>

using namespace std;
using ll = long long;


void solve() {
	int n;
	string ss;
	cin >> n >> ss;
	vector<vector<int>> e(n);
	for(int i = 1;i < n;i ++) {
		int x;
		cin >> x;
		x --;
		e[x].push_back(i);
	}
	vector<int> f(n),neg(n);
	vector<set<int>> s(n);
	auto dfs = [&](auto self,int x) -> void {
        
        for(auto v:e[x]) {
        	self(self,v);
        	f[x] += f[v];
        	if(s[x].size() == 0) {
        		s[x].swap(s[v]);
                neg[x] = neg[v];
        		continue;
        	}
        	int len = min(s[x].size(),s[v].size());
        	auto it1 = s[x].begin();
        	auto it2 = s[v].begin();
        	set<int> tmp;
        	int negtmp = 0;
        	for(int i = 0;i < len;i ++,it1 ++,it2 ++) {
        		int val = *it1 + *it2;
        		if(val < 0)negtmp += val;
                tmp.insert(val);
        	}
        	neg[x] = negtmp;
        	s[x].swap(tmp);
        }
        f[x] += ss[x] - '0';
        if(ss[x] == '0') s[x].insert(1);
        else s[x].insert(-1),neg[x] -= 1;
        // cerr << x << " " << f[x] << endl;
	}; 
	dfs(dfs,0);
	for(int i = 0;i < n;i ++) {
		cout << f[i] + neg[i] << " \n"[i == n - 1];
	}
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T;
	cin >> T;
	while(T --) {
		solve();
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3592kb

input:

2
9
101011110
1 1 3 3 3 6 2 2
4
1011
1 1 3

output:

4 1 2 0 0 0 0 0 0
2 0 0 0

result:

ok 2 lines

Test #2:

score: -100
Wrong Answer
time: 166ms
memory: 35716kb

input:

6107
12
000000001000
1 2 3 2 5 4 4 7 3 8 11
19
1100111101111011110
1 2 1 1 4 5 2 4 3 2 2 7 10 2 11 3 15 5
7
0111110
1 1 2 2 1 5
3
000
1 1
7
1000011
1 2 3 3 5 4
7
0001001
1 1 1 3 5 3
8
00111000
1 1 3 2 5 2 7
11
11111110111
1 1 1 4 5 4 5 2 5 1
15
110101101000010
1 2 3 2 1 5 2 5 6 5 8 7 9 14
10
0101000...

output:

1 1 1 1 0 0 0 0 0 0 0 0
6 2 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0
0 0 0
0 0 0 0 0 0 0
2 0 1 0 0 0 0
2 1 0 0 0 0 0 0
4 0 0 2 1 0 0 0 0 0 0
4 3 0 0 2 0 0 0 0 0 0 0 0 0 0
2 0 1 0 0 0 0 0 0 0
6 5 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0
1 1 0 0 0
5 1 0 1 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0
5 3 ...

result:

wrong answer 40th lines differ - expected: '3 3 1 0 1 1 1 1 0 0 0 0 0 0 0 0', found: '4 4 3 0 1 1 1 1 0 0 0 0 0 0 0 0'