有 nn 辆自行车依次来到停车棚,除了第一辆自行车外,每辆自行车都会恰好停放在已经在停车棚里的某辆自行车的左边或右边。(e.g.停车棚里已经有 3 辆自行车,从左到右编号为:3,5,1。现在编号为 22 的第 4 辆自行车要停在 5 号自行车的左边,所以现在停车棚里的自行车编号是:3,2,5,1)。给定n辆自行车的停放情况,按顺序输出最后停车棚里的自行车编号。≤100000。
输入描述
第一行一个整数 n。 第二行一个整数x。表示第一辆自行车的编号。 以下 n-1 行,每行 3 个整数 x,y,z。 z=0 时,表示编号为 x 的自行车恰停放在编号为 y 的自行车的左边。 z=1时,表示编号为 x的自行车恰停放在编号为 y的自行车的右边。
输出描述
从左到右输出停车棚里的自行车编号
输入输出样例
示例
输入
4
3
1 3 1
2 1 0
5 2 1
输出
3 2 5 1
STL链表的常用操作
insert()在指定位置前插入一个或多个元素
前插
a.insert(a.begin(),100); //在a的开始位置(即头部)插入100
a.insert(a.begin(),2, 100); //在a的开始位置插入2个100
a.insert(a.begin(),b.begin(), b.end());//在a的开始位置插入b从开始到结束的所有位置的元素
自增自减
++,–在后 整体的值不变,自增
在前 整体值也改变
代码
//STl自行车停放
#include<bits/stdc++.h>
using namespace std;
long long n,x,a,b,c;
list<int> :: iterator loc[100003];
int main(){
long long i;//为什么用long long
list<int> L;
cin>>n>>x;
L.push_back(x); //把x插入
loc[x] = L.begin(); //x的地址为链表的起始值
list<int> :: iterator temp;
for(int i=1;i<=n-1;i++){
cin>>a>>b>>c; //a为代插元素,b为已有元素,c为方向
temp = loc[b]; //b的地址给temp
if(c==0){//左边插入
L.insert(temp,a);
loc[a] = --temp;
}
else{
//右边插入
L.insert(++temp,a);
loc[a] =--temp;
}
}
for(list<int>::iterator it = L.begin() ; it!=L.end() ; it++)
cout << *it <<" ";
return 0;
}