思路:先用链表将所有的点串起来,再遍历链表,分别将原始表的和删除表中的节点分别存到两个结构体数组中
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e5+10;
struct Node
{
int ads;
int value;
};
int e[N],ne[N];
int had,n;
bool st[N];
int main()
{
cin>>had>>n;
for(int i=1;i<=n;i++)
{
int a,b,c;
cin>>a>>b>>c;
h[a]=i;
e[a]=b;
ne[a]=c;
}
Node node1[N],node2[N];
int t1=0,t2=0;
for(int i=had;i!=-1;i=ne[i])
{
int j=e[i];
if(!st[abs(j)])
{
node1[t1++]={i,e[i]};
st[abs(j)]=1;
}
else
{
node2[t2++]={i,e[i]};
}
}
for(int j=0;j<t1;j++)
{
if(j==0) printf("%05d %d ",node1[j].ads,node1[j].value);
else
{
printf("%05d\n%05d %d ",node1[j].ads,node1[j].ads,node1[j].value);
}
if(j==t1-1) cout<<"-1"<<endl;
}
for(int j=0;j<t2;j++)
{
if(j==0) printf("%05d %d ",node2[j].ads,node2[j].value);
else
{
printf("%05d\n%05d %d ",node2[j].ads,node2[j].ads,node2[j].value);
}
if(j==t2-1) cout<<"-1"<<endl;
}
}