QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#376238 | #7736. Red Black Tree | wtz2333 | WA | 182ms | 44912kb | C++17 | 1.3kb | 2024-04-04 00:16:16 | 2024-04-04 00:16:17 |
Judging History
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] = tmp;
}
f[x] += ss[x] - '0';
if(ss[x] == '0') s[x].insert(1);
else {
s[x].insert(-1);
neg[x] --;
}// 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: 3544kb
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: 182ms
memory: 44912kb
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'