计蒜客 堆积木

蒜头君有 nn 块积木,编号分别为 11 到 nn。一开始,蒜头把第 ii 块积木放在位置 ii。蒜头君进行 mm 次操作,每次操作,蒜头把位置 bb 上的积木整体移动到位置 aa 上面。比如 11 位置的积木是 1122 位置的积木是 22,那么把位置 22 的积木移动到位置 11 后,位置 11 上的积木从下到上依次为 1,21,2

输入格式

第一行输入 22 个整数 n,m(1 \le n \le 10000, 0 \le m \le 10000)n,m(1n10000,0m10000)

接下来 mm 行,每行输入 22 个整数 a, b(1 \le a, b \le n)a,b(1a,bn),如果aabb 相等则本次不需要移动。

输出格式

输出 nn 行,第 ii 行输出位置 ii 从下到上的积木编号,如果该行没有积木输出一行空行。

样例输入1
2 2
1 2
1 2
样例输出1
1 2

样例输入2
4 4
3 1
4 3
2 4
2 2
样例输出2
2 4 3 1

思路 : 先给每一项初始化  然后逐次判断 b为空或者b==a不进行执行操作  else 将b中的所有元素 依次push到a中  并将b置空

最后进行输出  为空则只输出换行

#include <bits/stdc++.h>
#include <vector>

using namespace std;

vector<int> S[10010];

int main()

{
	
	int n , m;
	
	cin>>n>>m;
	
	for(int i = 1; i <= n; i++)
	
	S[i].push_back(i);
	
	for(int i = 0; i<m; i++)
	
	{
		
		int tmp_a,tmp_b;
		
		cin>>tmp_a>>tmp_b;
		
		if(S[tmp_b].empty() || tmp_a == tmp_b)
		
		continue;
		
		else
		
		{
			
			for(int i = 0; i<S[tmp_b].size(); i++)
			
			S[tmp_a].push_back(S[tmp_b][i]);
			
			S[tmp_b].clear();
			
			{
				
				vector<int> V;
				
				S[tmp_b].swap(V);
			}
		}
	}
	
	for(int i = 1; i <= n; i++)
	
	if(S[i].empty())
	
	cout<<endl;
	
	else
	
	{
		
		for(int j = 0; j<S[i].size(); j++)
		
		if(j != S[i].size()-1)
		
		cout<<S[i][j]<<' ';
		
		else
		
		cout<<S[i][j]<<endl;
	}
	
	return 0;
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值