Matter:
1.这个题目改了近一个小时,各种小错误不断。
能用固定的const的地方就用,因为范围10^5次方少了一个0怎么查也查不出来这种问题已经又很多次了。
Code:
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int key , next , address;
bool is_value;
}Node[100005];
bool cmp(node a , node b){
if(a.is_value == false || b.is_value == false){
return a.is_value > b.is_value;
}
else{
return a.key < b.key;
}
}
int main(){
int N , start;
scanf("%d %d" , &N , &start);
//初始化链表
for(int i = 0 ; i < 100005 ; i ++){
Node[i].is_value = false;
}
//输入
for(int i = 0 ; i < N ; i ++){
int a , b , c;
scanf("%d%d%d" , &a , &b, &c);
Node[a].address = a;
Node[a].key = b;
Node[a].next = c;
}
//建立一个初始的链表,确定是否有效,统计Node上有效个数
int p = start , index = 0;
while(p != -1){
Node[p].is_value = true;
index ++;
p = Node[p].next;
}
//特殊判别
if(index == 0){
printf("0 -1");
}
else{
//对所有数据排序
sort(Node , Node + 100005 , cmp);
//输出
printf("%d %05d\n" , index , Node[0].address);
for(int i = 0 ; i < index ; i ++){
if(i == index - 1){
printf("%05d %d -1" , Node[i].address , Node[i].key);
}
else{
printf("%05d %d %05d\n" , Node[i].address , Node[i].key , Node[i + 1].address);
}
}
}
return 0;
}