你看下面这个链表:
void ins(int id,int x){
arr[++tot]={x,tail[id]};
tail[id]=tot;
if(!len[id])head[id]=tot;
len[id]++;
}
void del(int id){
int pr=arr[tail[id]].pre;
arr[tail[id]].pre=0;
tail[id]=pr;
len[id]--;
if(!pr)head[id]=0;
}
void merge(int id1,int id2,int id3){
arr[head[id2]].pre=id1;
head[id3]=(head[id1]?head[id1]:head[id2]);
tail[id3]=(tail[id2]?tail[id2]:tail[id1]);
len[id3]=len[id1]+len[id2];
}
看起来好像没有问题,但……
“arr[head[id2]].pre=id1;”
合并的时候要指到前一个链表的尾指针上!不是前一个链表的编号上!
这数据怎么这么水,链表写炸都有85pts,建议 CCF 加强数据