开始find函数是自己写的,for循环查找,超时
果断换用map,过了,但是仍有一点未过,结果为零也考虑了,还有什么呢?!!!
答:
printf("0 -1\n");
#include <vector>
#include<cstdio>
#include <algorithm>
#include <map>
using namespace std;
struct no{
int val;
int add;
int next;
}tmp[100010];
vector <no> node;
int n;
map <int,int>tmpmap;
//map <int,int>nodemap;
bool cmp(no a,no b){
return a.val<b.val;
}
int main(){
freopen("in.txt","r",stdin);
int s;
scanf("%d %d",&n,&s);
for(int i=0;i<n;i++){
scanf("%d %d %d",&tmp[i].add,&tmp[i].val,&tmp[i].next);
tmpmap[ tmp[i].add ]=i;
}
int cnt=0;
map<int,int>::iterator it=tmpmap.find(s);
if(it!=tmpmap.end()){
int k=it->second;
no tt;
tt.add=s;
tt.val=tmp[k].val;
tt.next=tmp[k].next;
node.push_back(tt);
while(node[cnt].next!=-1){
cnt++;
tt.add=node[cnt-1].next;
map<int,int>::iterator ff=tmpmap.find(tt.add);
k=ff->second;
tt.val=tmp[k].val;
tt.next=tmp[k].next;
node.push_back(tt);
}
sort(node.begin(),node.end(),cmp);
s=node[0].add;
for(int i=0;i<cnt;i++){
node[i].next=node[i+1].add;
}
node[cnt++].next=-1;
printf("%d %05d\n",cnt,s);
for(int i=0;i<cnt;i++){
if(node[i].next!=-1){
printf("%05d %d %05d\n",node[i].add,node[i].val,node[i].next);
}else{
printf("%05d %d -1\n",node[i].add,node[i].val);
}
}
}else{
printf("0\n");
}
return 0;
}