|
模拟链表
- #include<iostream>
- using namespace std;
- ///0:num 1:left 2:right
- int a[100010][3];
- int n,head,m,x,p;
- int main()
- {
- cin>>n;head=1;
- a[1][0]=1;
- for(int i=2;i<=n;i++)
- {
- cin>>x>>p;
- a[i][0]=i;
- if(p==0)
- {
- a[a[x][1]][2]=i;a[i][2]=x;
- a[i][1]=a[x][1];a[x][1]=i;
- if(x==head) head=i;
- }
- else
- {
- a[a[x][2]][1]=i;a[i][1]=x;
- a[i][2]=a[x][2];a[x][2]=i;
- }
- }
- cin>>m;int t=n;
- for(int i=1;i<=m;i++)
- {
- cin>>x;
- if(a[x][0]!=0)
- {
- a[x][0]=0;
- a[a[x][1]][2]=a[x][2];
- a[a[x][2]][1]=a[x][1];
- t--;
- if(x==head) head=a[head][2];
- }
- }
- int tt=head;
- for(int i=1;i<=t;i++)
- {
- cout<<a[tt][0]<<" ";
- tt=a[tt][2];
- }
- return 0;
- }
复制代码 |
|