题意描述

核心:

STL-list的使用,并使用正反lsit来维护双向列表

代码

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+7;
list <int> x[N], y[N];
int n,m;
int main()
{
    while(~scanf("%d %d",&n,&m)) {
        for (int i=1;i<=n;i++) {
            x[i].clear(); x[i].push_back(i);
            y[i].clear(); y[i].push_back(i);
        }
        while (m--) {
            int a,b; scanf("%d %d",&a,&b);
            x[a].splice(x[a].end(), x[b]);
            y[b].splice(y[b].end(), y[a]);
            swap(x[a],y[b]);
            swap(y[a],y[b]);
            x[b].clear();
            y[b].clear();
        }
        printf("%d",x[1].size());
        for (int it: x[1])
            printf(" %d",it);
        printf("\n");
    }
    return 0;
}