qz
查看原帖
qz
406811
zyy66666楼主2021/10/12 14:18

代码求调,输出队列时队列里元素位置不对

#include<bits/stdc++.h>
using namespace std;
	int n,k,p,m,z=1,ans[100001],lenans,zz;
struct lian{
	int zx,bzx;
}l[100001];
inline int read(){
	int w=0,s=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')
			s=-1;
		ch=getchar();
	}
	while(ch<='9'&&ch>='0'){
		w=w*10+ch-'0';
		ch=getchar();
	}
	return s*w;
}
int main(){
//	freopen("arrange.in","r",stdin);
//	freopen("arrange.out","w",stdout);	
	n=read();
	for(register int i=2;i<=n;++i){
		k=read();
		p=read();
		if(p==1){
			l[i].zx=l[k].zx;
			l[l[k].zx].bzx=i;
			l[k].zx=i;
			l[i].bzx=k;
		}
		else if(p==0){
			l[i].zx=l[k].zx;
			l[l[k].zx].bzx=i;
			l[k].zx=i;
			l[i].bzx=k;
		}
	}
	m=read();
	for(register int i=1;i<=m;++i){
		int x;
		x=read();
		l[l[x].bzx].zx=l[x].zx;
		l[l[x].zx].bzx=l[x].bzx;
		if(x==z){
			z=l[x].bzx;
		}
	}
	zz=z;
	while(l[z].zx!=0){
		ans[++lenans]=l[z].zx;
	//	printf("%d ",l[z].zx);
		z=l[z].zx;
	}
	//cout<<lenans;
	for(register int i=lenans;i>=1;i--)
		printf("%d ",ans[i]);
	printf("%d ",zz);
	return 0;
} 

/*
4
1 0
2 1
1 0
2
3
3
*/

2021/10/12 14:18
加载中...