题解:P14590 计组实验

· · 题解

题目大意:

给定 n 个实验和 m 个事件,事件有两种,一种是学生学某一个实验,一种是两个学生交换学科。要求最后给出 n 种实验的报名情况。

解题思路:

考虑到实验的个数以及事件的个数并不多,所以模拟即可,本题主要考验的是对数据结构的运用(vector),如果单独开那么大的数组一定会爆空间,所以要用到 vector 数组,相当于说你要用多少就开多少的数组,非常方便。

代码如下:

#include<bits/stdc++.h>
using namespace std;
vector<int>bian[300005];
int n,m;
int main() {
    cin>>n>>m;
    for(int i=1;i<=m;i++){//注意,是m个事件!!!
        int pd;
        cin>>pd;
        if(pd==1){
            int a,b;
            cin>>a>>b;
            bian[a].push_back(b);
        }
        else{
            int a,b,c,d;
            cin>>a>>b>>c>>d;
            swap(bian[a][b-1],bian[c][d-1]);
        }
    }
    for(int i=1;i<=n;i++){
        cout<<bian[i].size()<<" ";
        for(auto nwz:bian[i])cout<<nwz<<" ";
        cout<<'\n';
    }
    return 0;
}