双向链表 0 分求调!
查看原帖
双向链表 0 分求调!
1008513
xiaoshumiao楼主2023/12/5 10:02

rt,2 个 WA 和 3 个 TLE.

#include<cstdio>
using namespace std;
const int MAXN=100005;
int index[MAXN],tot;
struct Node {
  int pre,nxt,val;
  Node(int _pre=0,int _nxt=0,int _val=0) {
  	pre=_pre;
  	nxt=_nxt;
  	val=_val;
  }
}node[MAXN];
void ins_back(int x,int y) {
  int now=index[x];
  node[++tot]=Node(now,node[now].nxt,y);
  node[node[now].nxt].pre=node[now].nxt=index[y]=tot;
}
void ins_front(int x,int y) {
  int now=index[x];
  node[++tot]=Node(node[now].pre,now,y);
  node[node[now].pre].nxt=node[now].pre=index[y]=tot;
}
void del(int x) {
  int y=node[index[x]].pre,z=node[index[x]].nxt;
  index[x]=0;
  node[y].nxt=z;
  node[z].pre=y;
}
int main() {
  int n,m,k,p,x;
  scanf("%d",&n);
  node[0]=Node();
  ins_back(0,1);
  for(int i=2;i<=n;i++) {
  	scanf("%d %d",&k,&p);
  	if(p==0)
  	  ins_front(k,i);
  	else
  	  ins_back(k,i);
  }
  scanf("%d",&m);
  for(int i=1;i<=m;i++) {
  	scanf("%d",&x);
  	if(index[x]!=0)
  	  del(x);
  }
  int t=node[0].nxt;
  while(t!=0) {
  	printf("%d ",node[t].val);
  	t=node[t].nxt;
  }
  return 0;
}
2023/12/5 10:02
加载中...