求救!WA #2#3#4#5
查看原帖
求救!WA #2#3#4#5
1718117
Liuyx06楼主2025/8/2 11:23
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct Node{int pre, nxt;};
struct Llist{
    Node node[100005];
    bool exist[100005];
    int head, tail;
    Llist(){
        memset(node, 0, sizeof(node));
        memset(exist, 0, sizeof(exist));
        head = tail = -1;
    }
    void add(int x, int k, bool p){
        exist[x] = 1;
        if(head == -1){
            head = tail = x;
            node[x].pre = node[x].nxt = -1;
        }
        else if(p){
            if(k != tail) node[node[k].nxt].pre = x;
            node[x].nxt = node[k].nxt;
            if(k != tail) node[k].nxt = x;
            node[x].pre = k;
            if(k == tail) tail = x;
        }
        else{
            if(k != head) node[node[k].pre].nxt = x;
            node[x].pre = node[k].pre;
            if(k != head) node[k].pre = x;
            node[x].nxt = k;
            if(k == head) head = x;
        }
    }
    void fake_del(int x){
        exist[x] = 0;
    }
    void print(){
        if(head == -1) return;
        int now = head;
        while(now != -1){
            if(exist[now]) printf("%d ", now);
            now = node[now].nxt;
        }
    }
} l;
int n, k, p, m, x;
int main(){
    scanf("%d", &n);
    l.add(1, -1, 1);
    for(int i = 2; i <= n; i++){
        scanf("%d%d", &k, &p);
        l.add(i, k, p);
    }
    scanf("%d", &m);
    for(int i = 1; i <= m; i++){
        scanf("%d", &x);
        l.fake_del(x);
    }
    l.print();
    return 0;
}

手搓的双向列表,一开始0pts,瞅了瞅讨论区进食警示后人,#1改对了,但后4个点还是WA……

2025/8/2 11:23
加载中...