60分求调
查看原帖
60分求调
1244441
17831860709g楼主2024/5/2 16:20
#include<iostream>
#include<algorithm>
using namespace std;
const int N=100010;
int head,e[N],l[N],r[N],idx;
int n,m;
int tt[N];
void init()
{
	r[0]=1;
	l[1]=0;
	idx=2;
}
void add(int x,int y)
{
	int k;
	for(int i=2;i<idx;i++)
	{
		if(e[i]==y)
		{
			k=i;
			break;
		}
	}
	e[idx]=x;
	r[idx]=r[k];
	l[idx]=k;
	l[r[k]]=idx;
    r[k]=idx;
    idx++;
}
void add1(int x,int y)
{
	int k;
	for(int i=2;i<idx;i++)
	{
		if(e[i]==y)
		{
			k=i;
			break;
		}
	}
	e[idx]=x;
	r[idx]=k;
	l[idx]=l[k];
	r[l[k]]=idx;
	l[k]=idx;
	idx++;
}
int main()
{
	init();
	e[idx]=1,l[idx]=0,r[idx]=r[0],l[r[0]]=idx,r[0]=idx++;
	cin>>n;
	int a,b;
	for(int i=2;i<=n;i++)
	{
		cin>>a>>b;
		if(b==1)
		{
			add(i,a);
		}
		else if(b==0)
		{
			add1(i,a);
		}
	}
	cin>>m;
	for(int i=0;i<m;i++)
	{
		cin>>tt[i];
	}
	sort(tt,tt+m);
	int kk=unique(tt,tt+m)-tt;
	for(int i=0;i<kk;i++)
	{
		int k=0;
		for(int j=2;j<idx;j++)
		{
			if(e[j]==tt[i])
			{
				k=j;
				l[r[k]]=l[k];
				r[l[k]]=r[k];
				break;
			}
		}
	}
	for(int i=r[0];i!=1;i=r[i])
	cout<<e[i]<<" ";
	cout<<endl;
	return 0;
}
2024/5/2 16:20
加载中...