K12589 摆积木

题目描述

小科正在玩积木,他手里一共有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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值