CF847A 题解
题意
题面看着挺长的,有点复杂。但翻译一下即为:给你一些双向链表,把他们首尾相连,最后输出。
思路
每次将这个链表头与上一次的尾连起来,再将尾更新为当前的尾(事实上,只需要用数组模拟即可,无需链表)。
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e2+10;
int n,f,a[N],b[N];
int main(){
ios::sync_with_stdio(false);//去同步
cin.tie(0);cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i]>>b[i];
//输入
for(int i=1;i<=n;i++){
if(a[i]==0){
b[f]=i;
a[i]=f;
f=i;
while(b[f]) f=b[f];//连接
}
}
for(int i=1;i<=n;i++) cout<<a[i]<<" "<<b[i]<<endl;//输出
return 0;
}