本蒟本来以为已经彻底掌握了邻接表的写法,单靠自己的思维去单刷这道题,结果看来还是本蒟想的太过简单,以为凭自己的水平不单独设置头节点head而用h[0]代替也可以AC这道水题,事实证明我依旧是那么的蒟,最后还是在ac了两个样例的情况下屁颠屁颠地跑去看题解…不用head用h[0]代替在第三个样例的时候就输入为空了,测试表明,似乎只能用单独的head
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
string s;
int h[N],ne[N],e[N],idx,head=-1;
void add(int a,int b)
{
e[idx] = b;ne[idx] = head; head = idx++;
}
void add2(int a,int b)
{
e[idx] = b;ne[idx] = ne[a];ne[a] = idx++;
}
void dele(int a)
{
ne[a]=ne[ne[a]];
}
int main()
{
memset(h,-1,sizeof h);
int m,n,a,b;cin >> m;
while(m--){
cin >> s;
if(s=="H"){
cin >> a;
h[0]=-1;
add/*2*/(0,a);
}else if(s=="I") {
cin >> a >> b;//第i个插入的数代表着idx为i-1;
add2(a-1,b);
}else if(s=="D"){
cin >> a;
if(a==0) head = ne[head];
else dele(a-1);
}
}
for(int i = head ; i != -1 ; i = ne[i]) {
cout << e[i] << " ";
}
return 0;
}