题目
蒜头君有 <math> <semantics> <mrow> <mi> n </mi> </mrow> <annotation encoding="application/x-tex"> n </annotation> </semantics> </math>n 块积木,编号分别为 <math> <semantics> <mrow> <mn> 1 </mn> </mrow> <annotation encoding="application/x-tex"> 1 </annotation> </semantics> </math>1 到 <math> <semantics> <mrow> <mi> n </mi> </mrow> <annotation encoding="application/x-tex"> n </annotation> </semantics> </math>n。
一开始,蒜头把第 <math> <semantics> <mrow> <mi> i </mi> </mrow> <annotation encoding="application/x-tex"> i </annotation> </semantics> </math>i 块积木放在位置 <math> <semantics> <mrow> <mi> i </mi> </mrow> <annotation encoding="application/x-tex"> i </annotation> </semantics> </math>i。
蒜头君进行 <math> <semantics> <mrow> <mi> m </mi> </mrow> <annotation encoding="application/x-tex"> m </annotation> </semantics> </math>m 次操作,每次操作,蒜头把位置 <math> <semantics> <mrow> <mi> b </mi> </mrow> <annotation encoding="application/x-tex"> b </annotation> </semantics> </math>b 上的积木整体移动到位置 <math> <semantics> <mrow> <mi> a </mi> </mrow> <annotation encoding="application/x-tex"> a </annotation> </semantics> </math>a 上面。
比如 <math> <semantics> <mrow> <mn> 1 </mn> </mrow> <annotation encoding="application/x-tex"> 1 </annotation> </semantics> </math>1 位置的积木是 <math> <semantics> <mrow> <mn> 1 </mn> </mrow> <annotation encoding="application/x-tex"> 1 </annotation> </semantics> </math>1, <math> <semantics> <mrow> <mn> 2 </mn> </mrow> <annotation encoding="application/x-tex"> 2 </annotation> </semantics> </math>2 位置的积木是 <math> <semantics> <mrow> <mn> 2 </mn> </mrow> <annotation encoding="application/x-tex"> 2 </annotation> </semantics> </math>2,那么把位置 <math> <semantics> <mrow> <mn> 2 </mn> </mrow> <annotation encoding="application/x-tex"> 2 </annotation> </semantics> </math>2 的积木移动到位置 <math> <semantics> <mrow> <mn> 1 </mn> </mrow> <annotation encoding="application/x-tex"> 1 </annotation> </semantics> </math>1 后,位置 <math> <semantics> <mrow> <mn> 1 </mn> </mrow> <annotation encoding="application/x-tex"> 1 </annotation> </semantics> </math>1 上的积木从下到上依次为 <math> <semantics> <mrow> <mn> 1 </mn> <mo separator="true"> , </mo> <mn> 2 </mn> </mrow> <annotation encoding="application/x-tex"> 1,2 </annotation> </semantics> </math>1,2。
输入格式
第一行输入 <math> <semantics> <mrow> <mn> 2 </mn> </mrow> <annotation encoding="application/x-tex"> 2 </annotation> </semantics> </math>2 个整数 <math> <semantics> <mrow> <mi> n </mi> <mo separator="true"> , </mo> <mi> m </mi> <mo> ( </mo> <mn> 1 </mn> <mo> ≤ </mo> <mi> n </mi> <mo> ≤ </mo> <mn> 10000 </mn> <mo separator="true"> , </mo> <mn> 0 </mn> <mo> ≤ </mo> <mi> m </mi> <mo> ≤ </mo> <mn> 10000 </mn> <mo> ) </mo> </mrow> <annotation encoding="application/x-tex"> n,m(1 \le n \le 10000, 0 \le m \le 10000) </annotation> </semantics> </math>n,m(1≤n≤10000,0≤m≤10000)。
接下来 <math> <semantics> <mrow> <mi> m </mi> </mrow> <annotation encoding="application/x-tex"> m </annotation> </semantics> </math>m 行,每行输入 <math> <semantics> <mrow> <mn> 2 </mn> </mrow> <annotation encoding="application/x-tex"> 2 </annotation> </semantics> </math>2 个整数 <math> <semantics> <mrow> <mi> a </mi> <mo separator="true"> , </mo> <mi> b </mi> <mo> ( </mo> <mn> 1 </mn> <mo> ≤ </mo> <mi> a </mi> <mo separator="true"> , </mo> <mi> b </mi> <mo> ≤ </mo> <mi> n </mi> <mo> ) </mo> </mrow> <annotation encoding="application/x-tex"> a, b(1 \le a, b \le n) </annotation> </semantics> </math>a,b(1≤a,b≤n),如果 <math> <semantics> <mrow> <mi> a </mi> </mrow> <annotation encoding="application/x-tex"> a </annotation> </semantics> </math>a, <math> <semantics> <mrow> <mi> b </mi> </mrow> <annotation encoding="application/x-tex"> b </annotation> </semantics> </math>b 相等则本次不需要移动。
输出格式
输出 <math> <semantics> <mrow> <mi> n </mi> </mrow> <annotation encoding="application/x-tex"> n </annotation> </semantics> </math>n 行,第 <math> <semantics> <mrow> <mi> i </mi> </mrow> <annotation encoding="application/x-tex"> i </annotation> </semantics> </math>i 行输出位置 <math> <semantics> <mrow> <mi> i </mi> </mrow> <annotation encoding="application/x-tex"> i </annotation> </semantics> </math>i 从下到上的积木编号,如果该行没有积木输出一行空行。
样例输入
2 2
1 2
1 2
样例输出
1 2
样例输入
4 4
3 1
4 3
2 4
2 2
样例输出
2 4 3 1
题解
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
int n,m;
vector<vector<int> > v;
cin>>n>>m;
for(int i=1;i<=n;i++){
vector<int> t;
t.push_back(i);
v.push_back(t);
}
int d1,d2;
for(int i=0;i<m;i++){
cin>>d1>>d2;
d1--;
d2--;
if(d1!=d2){
// 将位置 d2 上的积木整体移动
for(int j=0;j<v[d2].size();j++)
v[d1].push_back(v[d2][j]);
// 清空动态数组内存,clear不行
{
vector<int> t;
v[d2].swap(t);
}
}
}
for(int i=0;i<n;i++){
if(v[i].size()){
cout<<v[i][0];
for(int j=1;j<v[i].size();j++)
cout<<" "<<v[i][j];
}
cout<<endl;
}
return 0;
}