题意描述
核心:
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("
");
}
return 0;
}