QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#680605 | #7736. Red Black Tree | Yoralen | WA | 195ms | 47028kb | C++14 | 1.3kb | 2024-10-26 21:44:21 | 2024-10-26 21:44:21 |
Judging History
answer
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
const int N=200005;
struct edge{int to,next;}w[N<<1];
int n,h[N],cnt,T,a[N];
char s[N];
void Add(int x,int y){
w[++cnt].to=y,w[cnt].next=h[x],h[x]=cnt;
}
int hd[N],ng[N],ans[N],sv[N];
set<int>S[N];
void DFS(int u){
int i;hd[u]=a[u];
for(i=h[u];i;i=w[i].next){
int e=w[i].to;
DFS(e);hd[u]+=hd[e];
if(!S[u].size())S[u]=S[e],ng[u]=ng[e];
else{
set<int>::iterator it=S[u].begin(),jt=S[e].begin();
int pos=0;
while(it!=S[u].end()&&jt!=S[e].end()){
sv[++pos]=*it+*jt;
it++;jt++;
}
S[u].clear();ng[u]=0;
while(pos){
if(sv[pos]<0)ng[u]+=sv[pos];
S[u].insert(sv[pos]),pos--;
}
}
}
if(a[u]==0)S[u].insert(1);else S[u].insert(-1),ng[u]--;
ans[u]=hd[u]+ng[u];
}
int main(){
int i,x;
scanf("%d",&T);
while(T--){
scanf("%d",&n);scanf("%s",s+1);cnt=0;
for(i=1;i<=n;i++)a[i]=s[i]-'0',h[i]=ng[i]=ans[i]=hd[i]=0,S[i].clear();
for(i=2;i<=n;i++)scanf("%d",&x),Add(x,i);DFS(1);
for(i=1;i<=n;i++)printf("%d ",ans[i]);putchar('\n');
}
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 19336kb
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: 195ms
memory: 47028kb
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...
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 '