只得了19分。不想浪费时间去研究剩下6分了。
#include <stdio.h> #include <memory.h> #include <math.h> #include <string> #include <vector> #include <set> #include <stack> #include <queue> #include <algorithm> #include <map> #define I scanf #define OL puts #define O printf #define F(a,b,c) for(a=b;a<c;a++) #define FF(a,b) for(a=0;a<b;a++) #define FG(a,b) for(a=b-1;a>=0;a--) #define LEN 1000000 #define MAX 0x06FFFFFF #define V vector<int> using namespace std; typedef struct Node{ int d,next,i; }Node; Node nd[LEN]; //map<int,int> num2add; int main(){ // freopen("1074.txt","r",stdin); int f,n,k,add,num,next; int i,j; I("%d%d%d",&f,&n,&k); FF(i,n){ I("%d",&add); I("%d%d",&num,&next); nd[add].i=add; nd[add].d=num; nd[add].next=next; // num2add[num]=add; } vector<Node> ls; i=f; while(i>=0){ ls.push_back(nd[i]); i=nd[i].next; } int sz=ls.size(); reverse(ls.begin(),ls.begin()+k); for(i=k-1;i>=0;i--){ if(i+1<sz){ ls[i].next=ls[i+1].i; }else ls[i].next=-1; } FF(i,sz-1){ printf("%05d %d %05d ",ls[i].i,ls[i].d,ls[i].next); } printf("%05d %d %d ",ls[i].i,ls[i].d,ls[i].next); return 0; }