题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1052
解题感悟:题目挺简单的,主要在于测试点,想拿满分不易
代码如下:
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
struct node{
int add;
int next;
int data;
bool operator <(const node &A) const{
return data<A.data;
}
};
node d[100001];
vector<node> v;
int main()
{
//freopen("C:\\Users\\Devon\\Desktop\\input.txt","r",stdin);
int n;
int first;
scanf("%d%d",&n,&first);
if(first==-1){
printf("0 -1\n");
return 0;
}
else{
for(int i=0;i<n;i++){
int add,data,next;
scanf("%d%d%d",&add,&data,&next);
d[add].data=data;
d[add].next=next;
}
int cur=first;
while(1){
node temp;
temp.data=d[cur].data;
temp.add=cur;
temp.next=d[cur].next;
v.push_back(temp);
cur=temp.next;
if(cur==-1) break;//存在无效节点
}
sort(v.begin(),v.end());
int len=v.size();
if(len==0){
printf("0 -1\n");
return 0;
}
for(int i=0;i<len-1;i++) v[i].next=v[i+1].add;
v[len-1].next=-1;
printf("%d %05d\n",v.size(),v[0].add);
for(int i=0;i<len;i++){
if(v[i].next==-1) printf("%05d %d %d\n",v[i].add,v[i].data,v[i].next);
else printf("%05d %d %05d\n",v[i].add,v[i].data,v[i].next);
}
}
return 0;
}