题目

蒜头君有 <math> <semantics> <mrow> <mi> n </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> n </annotation> </semantics> </math>n 块积木,编号分别为 <math> <semantics> <mrow> <mn> 1 </mn> </mrow> <annotation encoding="application&#47;x&#45;tex"> 1 </annotation> </semantics> </math>1 <math> <semantics> <mrow> <mi> n </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> n </annotation> </semantics> </math>n

一开始,蒜头把第 <math> <semantics> <mrow> <mi> i </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> i </annotation> </semantics> </math>i 块积木放在位置 <math> <semantics> <mrow> <mi> i </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> i </annotation> </semantics> </math>i

蒜头君进行 <math> <semantics> <mrow> <mi> m </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> m </annotation> </semantics> </math>m 次操作,每次操作,蒜头把位置 <math> <semantics> <mrow> <mi> b </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> b </annotation> </semantics> </math>b 上的积木整体移动到位置 <math> <semantics> <mrow> <mi> a </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> a </annotation> </semantics> </math>a 上面。

比如 <math> <semantics> <mrow> <mn> 1 </mn> </mrow> <annotation encoding="application&#47;x&#45;tex"> 1 </annotation> </semantics> </math>1 位置的积木是 <math> <semantics> <mrow> <mn> 1 </mn> </mrow> <annotation encoding="application&#47;x&#45;tex"> 1 </annotation> </semantics> </math>1 <math> <semantics> <mrow> <mn> 2 </mn> </mrow> <annotation encoding="application&#47;x&#45;tex"> 2 </annotation> </semantics> </math>2 位置的积木是 <math> <semantics> <mrow> <mn> 2 </mn> </mrow> <annotation encoding="application&#47;x&#45;tex"> 2 </annotation> </semantics> </math>2,那么把位置 <math> <semantics> <mrow> <mn> 2 </mn> </mrow> <annotation encoding="application&#47;x&#45;tex"> 2 </annotation> </semantics> </math>2 的积木移动到位置 <math> <semantics> <mrow> <mn> 1 </mn> </mrow> <annotation encoding="application&#47;x&#45;tex"> 1 </annotation> </semantics> </math>1 后,位置 <math> <semantics> <mrow> <mn> 1 </mn> </mrow> <annotation encoding="application&#47;x&#45;tex"> 1 </annotation> </semantics> </math>1 上的积木从下到上依次为 <math> <semantics> <mrow> <mn> 1 </mn> <mo separator="true"> , </mo> <mn> 2 </mn> </mrow> <annotation encoding="application&#47;x&#45;tex"> 1,2 </annotation> </semantics> </math>1,2

输入格式

第一行输入 <math> <semantics> <mrow> <mn> 2 </mn> </mrow> <annotation encoding="application&#47;x&#45;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&#47;x&#45;tex"> n,m(1 \le n \le 10000, 0 \le m \le 10000) </annotation> </semantics> </math>n,m(1n10000,0m10000)

接下来 <math> <semantics> <mrow> <mi> m </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> m </annotation> </semantics> </math>m 行,每行输入 <math> <semantics> <mrow> <mn> 2 </mn> </mrow> <annotation encoding="application&#47;x&#45;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&#47;x&#45;tex"> a, b(1 \le a, b \le n) </annotation> </semantics> </math>a,b(1a,bn),如果 <math> <semantics> <mrow> <mi> a </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> a </annotation> </semantics> </math>a <math> <semantics> <mrow> <mi> b </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> b </annotation> </semantics> </math>b 相等则本次不需要移动。

输出格式

输出 <math> <semantics> <mrow> <mi> n </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> n </annotation> </semantics> </math>n 行,第 <math> <semantics> <mrow> <mi> i </mi> </mrow> <annotation encoding="application&#47;x&#45;tex"> i </annotation> </semantics> </math>i 行输出位置 <math> <semantics> <mrow> <mi> i </mi> </mrow> <annotation encoding="application&#47;x&#45;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;
}

返回目录,查看更多