题目描述
小科正在玩积木,他手里一共有n块积木,编号分别为1到n,一开始,小科把第i块积木放在位置i处。然后他进行了m次操作,每次操作小科把位置b上的积木整体移动到位置a的上面。请问m次操作后,每个位置上有哪些积木呢?
输入格式
第一行,两个整数n和m(1≤n≤10000,1≤m≤10000)
接下来m行,每行两个整数a和b,描述一次移动操作,如果a与b相等则不需要进行任何操作
输出格式
输出n行,从位置1到位置n,输出每个位置上从下到上的积木的编号,如果某个位置上没有积木则对应的行则输出"empty"。
【耗时限制】1000ms 【内存限制】128MB
AC代码:
#include <iostream>
#include <vector>
using namespace std;
int main(void){
int n, m,a, b;
vector<int> v[10000];
cin >> n >> m;
for (int i = 0; i < n; i++) v[i].push_back(i + 1);
for (int i = 0; i < m; i++){
cin >> a >> b;
if (a == b)continue;
for (int j = 0; j < v[b - 1].size(); j++) v[a - 1].push_back(v[b - 1][j]);
v[b - 1].clear();
vector<int>().swap(v[b - 1]);
}
for (int i = 0; i < n; i++){
if (v[i].size() == 0){
cout << "empty" << endl;
continue;
}
for (int j = 0; j < v[i].size(); j++){
cout << v[i][j];
if (j != v[i].size() - 1) cout << " ";
}
cout << endl;
}
return 0;
}