原題連結
題解
把不需要刪的放一邊,需要刪的放一邊,大模擬題,注意結尾特判(為什麼?想象極限條件)
code
#include<bits/stdc++.h>
using namespace std;
struct node
{
int val,next;
}chain[100005];
int vis[100005]={0};
int main()
{
int start,n;
cin>>start>>n;
for(int i=1;i<=n;i++)
{
int x;
cin>>x>>chain[x].val>>chain[x].next;
}
vector<int> a,b;
int it=start;
for(int it=start;it!=-1;it=chain[it].next)
{
int now=abs(chain[it].val);
if(vis[now]) b.push_back(it);
else a.push_back(it);
vis[now]=1;
}
int lena=a.size(),lenb=b.size();
for(int i=0;i<lena-1;i++) printf("%05d %d %05d\n",a[i],chain[a[i]].val,a[i+1]);
if(lena)printf("%05d %d -1\n",a[lena-1],chain[a[lena-1]].val);
for(int i=0;i<lenb-1;i++) printf("%05d %d %05d\n",b[i],chain[b[i]].val,b[i+1]);
if(lenb) printf("%05d %d -1\n",b[lenb-1],chain[b[lenb-1]].val);//特判,防止陣列-1查詢
return 0;
}