第一个测试点坑爹数据
00001 3
00001 1 00002
00002 2 -1
00003 3 00004
#include <iostream>
#include <cstdio>
#include <map>
#include <cstring>
using namespace std;
struct node
{
int x,y,z;
node(){}
node(int _x,int _y,int _z){x=_x,y=_y,z=_z;}
}nd[111111],ans1[111111],ans2[111111],nd1[111111];
map<int,int> mp;
int num[111111];
int cont[111111];
int main()
{
int s,n;
memset(num,0,sizeof(num));
memset(cont,0,sizeof(cont));
cin>>s>>n;
int st=0;
for(int i=0;i<n;i++)
{
scanf("%d%d%d",&nd1[i].x,&nd1[i].y,&nd1[i].z);
if(nd1[i].x==s)
st=i;
mp[nd1[i].x]=nd1[i].z;
num[nd1[i].x]=nd1[i].y;
}
int flag=0;
nd[flag++]=nd1[st];
int t=nd1[st].z;
int ff=1;
for(int i=0;i<n-1;i++)
{
int x,y,z;
x=t;
y=num[x];
z=mp[x];
t=z;
nd[flag++]=node(x,y,z);
ff++;
if(t==-1)
break;
}
int cont1=0;
int cont2=0;
for(int i=0;i<ff;i++)
{
int x,y,z;
x=nd[i].x;
y=nd[i].y;
z=nd[i].z;
if(!cont[abs(y)])
{
ans1[cont1++]=node(x,y,z);
cont[abs(y)]=1;
}
else
{
ans2[cont2++]=node(x,y,z);
}
}
for(int i=0;i<cont1-1;i++)
{
ans1[i].z=ans1[i+1].x;
}
ans1[cont1-1].z=-1;
for(int i=0;i<cont2-1;i++)
{
ans2[i].z=ans2[i+1].x;
}
ans2[cont2-1].z=-1;
for(int i=0;i<cont1;i++)
{
printf("%05d %d ",ans1[i].x,ans1[i].y);
if(ans1[i].z==-1)
printf("-1\n",ans1[i].z);
else
printf("%05d\n",ans1[i].z);
}
for(int i=0;i<cont2;i++)
{
printf("%05d %d ",ans2[i].x,ans2[i].y);
if(ans2[i].z==-1)
printf("-1\n");
else
printf("%05d\n",ans2[i].z);
}
return 0;
}