一开始就普通的写了一段,测试点的数据下载都过了,但跑出来就是RE;代码如下
#include<iostream>
using namespace std;
struct st{
int head;
int value;
int end;
}n[200010];
int main(){
int n1,m1,i,k,p,j;
cin>>n1;
for(int t=1;t<=n1;t++){
n[t].end=0;
n[t].head=0;
n[t].value=t;
}
n[0].end=1;
n[1].head=0;n[1].end=-1;n[1].value=1;
for(i=2;i<=n1;i++){
cin>>k>>p;
if(p==0){n[i].head=n[k].head;n[i].end=k;n[k].head=i;n[n[i].head].end=i;}
else{n[i].head=k;n[i].end=n[k].end;n[n[k].end].head=i;n[k].end=i;}
}
cin>>m1;
int x;
for(i=1;i<=m1;i++){
cin>>x;
if(n[x].value>-2){n[n[x].head].end=n[x].end;n[n[x].end].head=n[x].head;n[x].value=-2;}
}
i=n[0].end;
while(i!=-1){
cout<<n[i].value<<" ";
i=n[i].end;
}
}
后来把输入单独拿出来做了个for循环就AC了为啥啊:
#include<iostream>
using namespace std;
struct st{
int head;
int value;
int end;
}n[100010];
int main(){
int n1,m1,i,k,p,j,nx[100010],ny[100010],mx[100010];
cin>>n1;
for(i=2;i<=n1;i++){
cin>>nx[i]>>ny[i];
}
cin>>m1;
for(i=1;i<=m1;i++){
cin>>mx[i];
}
for(int t=1;t<=n1;t++){
n[t].end=0;
n[t].head=0;
n[t].value=t;
}
n[0].end=1;n[1].head=0;n[1].end=-1;n[1].value=1;
for(i=2;i<=n1;i++){
k=nx[i];p=ny[i];
if(p==0){n[i].head=n[k].head;n[i].end=k;n[k].head=i;n[n[i].head].end=i;}
else{n[i].head=k;n[i].end=n[k].end;n[n[k].end].head=i;n[k].end=i;}
}
int x;
for(i=1;i<=m1;i++){
x=mx[i];
if(n[x].value>-2){n[n[x].head].end=n[x].end;n[n[x].end].head=n[x].head;n[x].value=-2;}
}
i=n[0].end;
while(i!=-1){
cout<<n[i].value<<" ";
i=n[i].end;
}
return 0;
}