这是我40分代码
#include<bits/stdc++.h>
using namespace std;
struct node{
int data;
int nxt,last;
}a[100005];
int main(){
int n,m,x,head=1,j=1;
cin>>n;
a[1].last=0;
for(int i=2;i<=n;i++){
int k,p;
cin>>k>>p;
if(p==0){//? k i---> ? i k
a[a[k].last].nxt=i;
a[i].nxt=k;
a[i].last=a[k].last;
a[k].last=i;
if(k==j)
head=i,j=i;
}
else{//k ? i--->k i ?
a[a[k].nxt].last=i;
a[i].last=k;
a[i].nxt=a[k].nxt;
a[k].nxt=i;
}
}
cin>>m;
while(m--){
cin>>x;
a[a[x].last].nxt=a[x].nxt;
a[a[x].nxt].last=a[x].last;
if(x==head)head=a[x].nxt;
}
int i=head;
while(i){
cout<<i<<" ";
i=a[i].nxt;
}
return 0;
}
这是我100分代码
#include<bits/stdc++.h>
using namespace std;
struct node{
int data;
int nxt,last;
}a[100005];
int main(){
int n,m,x,head=1,j=1;
cin>>n;
a[1].last=0;
for(int i=2;i<=n;i++){
int k,p;
cin>>k>>p;
if(p==0){//? k i---> ? i k
a[a[k].last].nxt=i;
a[i].nxt=k;
a[i].last=a[k].last;
a[k].last=i;
if(k==j)
head=i,j=i;
}
else{//k ? i--->k i ?
a[a[k].nxt].last=i;
a[i].last=k;
a[i].nxt=a[k].nxt;
a[k].nxt=i;
}
}
cin>>m;
while(m--){
cin>>x;
a[a[x].last].nxt=a[x].nxt;
a[a[x].nxt].last=a[x].last;
if(x==head)head=a[x].nxt;
a[x].nxt=a[x].last=0;
}
int i=head;
while(i){
cout<<i<<" ";
i=a[i].nxt;
}
return 0;
}
不加a[x].nxt=a[x].last=0;就只有40分,为什么呀