一个小小的疑惑
查看原帖
一个小小的疑惑
483826
joker_zjd楼主2021/10/13 11:19

AC代码

#include<bits/stdc++.h>
using namespace std;
int n,Next[1000100],k,o,last[1000100];
bool aa[10000000];
int main() {
//	freopen("arrange.in","r",stdin);
//	freopen("arrange.out","w",stdout);
	cin>>n;
	Next[0]=1;
	Next[1]=1000000;
	last[1]=0;
	last[0]=1000000;
	for(int i=1; i<=n; i++) {
		aa[i]=1;
	}
	for(int i=2; i<=n; i++) {
		cin>>k>>o;
		if(o==1) {
			int klp=Next[k];
			Next[k]=i;
			last[i]=k;
			Next[i]=klp;
			last[klp]=i;
		}
		if(o==0) {
			int klp=last[k];
			last[k]=i;
			Next[i]=k;
			last[i]=klp;
			Next[klp]=i;
		}
	}
	int yyds,m;
	cin>>m;
	while(m--) {
		cin>>yyds;
		if(aa[yyds]!=0) {
			int ui=Next[yyds];
			int iu=last[yyds];
			last[yyds]=0;
			Next[yyds]=0;
			last[ui]=iu;
			Next[iu]=ui;
			
		}
		aa[yyds]=0;
	} 
	for(int i=Next[0];i!=1000000;i=Next[i]) {
		cout<<i<<' ';
	}
	return 0;
}

60分代码

#include<bits/stdc++.h>
using namespace std;
int n,Next[100001],k,o,last[100001];
bool aa[10000000];
int main() {
//	freopen("arrange.in","r",stdin);
//	freopen("arrange.out","w",stdout);
	cin>>n;
	Next[0]=1;
	Next[1]=100000;
	last[1]=0;
	last[0]=100000;
	for(int i=1; i<=n; i++) {
		aa[i]=1;
	}
	for(int i=2; i<=n; i++) {
		cin>>k>>o;
		if(o==1) {
			int klp=Next[k];
			Next[k]=i;
			last[i]=k;
			Next[i]=klp;
			last[klp]=i;
		}
		if(o==0) {
			int klp=last[k];
			last[k]=i;
			Next[i]=k;
			last[i]=klp;
			Next[klp]=i;
		}
	}

	int yyds,m;
	cin>>m;
	while(m--) {
		cin>>yyds;
		if(aa[yyds]!=0) {
			int ui=Next[yyds];
			int iu=last[yyds];
			last[yyds]=100000;
			Next[yyds]=100000;
			last[ui]=iu;
			Next[iu]=ui;
		}
		aa[yyds]=0;
	} 
	for(int i=Next[0]; i!=100000; i=Next[i]) {
		cout<<i<<' ';
	}
	return 0;
}

2021/10/13 11:19
加载中...