题意:
输入一个地址和一个正整数N(<=100000),接着输入N行每行包括一个五位数的地址和一个结点的值以及下一个结点的地址。输出除去具有相同绝对值的结点的链表以及被除去的链表(由被除去的结点组成的链表)。
AAAAAccepted code:
1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc++.h> 3 using namespace std; 4 int nex[100007],val[100007]; 5 vector<pair<int,int> >ans,ans2; 6 int vis[100007]; 7 int main(){ 8 //ios::sync_with_stdio(false); 9 //cin.tie(NULL); 10 //cout.tie(NULL); 11 int s,n; 12 cin>>s>>n; 13 for(int i=1;i<=n;++i){ 14 int x,y,z; 15 cin>>x>>y>>z; 16 nex[x]=z; 17 val[x]=y; 18 } 19 while(s!=-1){ 20 if(vis[abs(val[s])]){ 21 ans2.push_back({s,val[s]}); 22 s=nex[s]; 23 continue; 24 } 25 ans.push_back({s,val[s]}); 26 vis[abs(val[s])]=1; 27 s=nex[s]; 28 } 29 for(int i=0;i<ans.size();++i){ 30 printf("%05d %d ",ans[i].first,ans[i].second); 31 if(i<ans.size()-1) 32 printf("%05d ",ans[i+1].first); 33 else 34 printf("-1 "); 35 } 36 for(int i=0;i<ans2.size();++i){ 37 printf("%05d %d ",ans2[i].first,ans2[i].second); 38 if(i<ans2.size()-1) 39 printf("%05d ",ans2[i+1].first); 40 else 41 printf("-1 "); 42 } 43 return 0; 44 }