QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#680775 | #7736. Red Black Tree | Yoralen | TL | 0ms | 5852kb | C++14 | 1.5kb | 2024-10-26 22:38:50 | 2024-10-26 22:38:56 |
Judging History
answer
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N=100005;
struct edge{int to,next;}w[N<<1];
int n,h[N],cnt,T,a[N],ar[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];
struct Dlt{
vector<int>ng,ps;
int no=0,sg=0;
void Init(){
ng.clear();ps.clear();
no=sg=0;
}
int val(int k){
if(k<=ng.size())return ng[k-1];
else if(k<=ng.size()+no)return 0;
else return ps[ps.size()-(k-ng.size()-no)];
}
void Ins(int v){
if(v<0)ng.push_back(v),sg+=v;
if(v==0)no++;
if(v>0)ps.push_back(v);
}
int size(){
return ng.size()+no+ps.size();
}
};
Dlt DFS(int u){
int i,j,ln;hd[u]=a[u];
Dlt S,F;S.Init();
for(i=h[u];i;i=w[i].next){
int e=w[i].to;
F=DFS(e);hd[u]+=hd[e];
if(!S.size())S=F,ln=F.size();
else{
ln=min(ln,F.size());
for(j=1;j<=ln;j++)ar[j]=S.val(j)+F.val(j);
S.Init();int pl=1,pr=ln;
while(ar[pl]<0&&pl<=ln)S.Ins(ar[pl]),pl++;
while(ar[pr]>0&&pr>=1)S.Ins(ar[pr]),pr--;
S.no=pr-pl+1;
}
}
if(a[u]==0)S.Ins(1);else S.Ins(-1);
ans[u]=hd[u]+S.sg;return move(S);
}
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;
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: 5852kb
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
Time Limit Exceeded
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...