第一次有一个两分的测试点不过,猜到是不存在第二链的情况
加了一些判定条件
果然AC了
#include<iostream>
#include<set>
#include<algorithm>
using namespace std;
const int MAX = 1000000;
struct nodelist{
int data;
int add;
int next;
}node[MAX];
set<int> absdata;
int main(){
int n, root;
scanf("%d%d",&root,&n);
for(int i=0;i<n;i++){
int tempadd;
scanf("%d",&tempadd);
scanf("%d%d",&node[tempadd].data,&node[tempadd].next);
node[tempadd].add=tempadd;
}
int p=root;
int pre=p;
int flag=0;
int root2,p2;
while(p!=-1){
int tempdata=node[p].data;
if(absdata.find(abs(tempdata))!=absdata.end()){
if(flag==0){
root2=node[p].add;
node[pre].next=node[p].next;
p2=root2;
flag=1;
}
else{
node[p2].next=node[p].add;
node[pre].next=node[p].next;
p2=node[p2].next;
}
}
else
{
absdata.insert(abs(tempdata));
pre=p;
}
p=node[p].next;
}
if(flag==0){
root2=-1;
}
else
{
node[p2].next=-1;
}
//output
p=root,p2=root2;
while(1){
if(node[p].next==-1) break;
else{
printf("%05d %d %05d\n",node[p].add,node[p].data,node[p].next);
p=node[p].next;
}
}
printf("%05d %d %d\n",node[p].add,node[p].data,node[p].next);//-1
while(1){
if(node[p2].next==-1||p2==-1) break;
else{
printf("%05d %d %05d\n",node[p2].add,node[p2].data,node[p2].next);
p2=node[p2].next;
}
}
if(p2!=-1)
printf("%05d %d %d\n",node[p2].add,node[p2].data,node[p2].next);//-1
return 0;
}