求改
  • 板块P1160 队列安排
  • 楼主W_3052
  • 当前回复0
  • 已保存回复1
  • 发布时间2024/10/2 16:12
  • 上次更新2024/10/2 18:45:45
查看原帖
求改
1414477
W_3052楼主2024/10/2 16:12
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100002][5],s,f,js,x,b[100005];
/*a[][2]  左手 
  a[][3]  右手*/ 
int main(){
	cin>>n;
	a[1][1]=1;
	for(int i=2;i<=n;i++){
		cin>>s>>f;
		a[i][1]=i;
		if(f==1){
			a[i][2]=s;//i的左手牵上s 
			a[i][3]=a[s][3];//i的右手牵上s的右手上的人 
			a[a[s][3]][2]=a[s][3]=i;//s的右手牵i,s右手上的人用左手牵i 
		}
		else{
			a[i][3]=s;//i的右手牵上s 
			a[i][2]=a[s][2];//i的左手牵上s的左手上的人
			a[a[s][2]][3]=a[s][2]=i;//s的左手牵i,s左手上的人用右手牵i
		}
	}
	cin>>m;
	for(int i=1;i<=m;i++){//删人 
		cin>>x;
		if(b[x]==1)//删过的不删了 
			continue;
		a[a[x][2]][3]=a[x][3];//把要删这个人左手边的人的右手牵上要删这个人右手边的人 
		a[a[x][3]][2]=a[x][2];//把要删这个人右手边的人的左手牵上要删这个人左手边的人 
		b[x]=1;//标识已删 
		a[x][2]=9999999;
		n--;//人数减减 
	}
	n++;
	for(int i=1;i<=n;i++){//找到左手没牵人的那个人 
		if(a[i][2]==0){
			js=i;
			break;
		}
	}
	for(int i=1;i<=n;i++){//输出队列 
		if(a[js][1]!=0)
			cout<<a[js][1]<<" ";
		js=a[js][3];
	}
	return 0;
}
2024/10/2 16:12
加载中...