题解
使用一个数组记录两个人之间的情侣关系,即:a[x] = y, a[y] = x;
判断的时候,将先进来的人 x 和 x 的情侣y做标记,即:b[x] = b[a[x]] = 1;
如果之后的数进来, 若b[x] == 1 说明他的对象之前已经进来了
所以他们两个在这个判断一定不是单身狗,标记为 b[x] = b[a[x]] = 2
排队全部的人都由set接受,最后遍历set判断,利用set的自动排序功能
Code
#include <iostream>
#include <set>
#include <map>
#include <vector>
using namespace std;
int main()
{
int N;
cin >> N;
int x, y;
int a[100000] = {0};
int b[100000] = {0};
while (N--)
{
cin >> x >> y;
a[x] = y;
a[y] = x;
}
cin >> N;
set<int> v;
int cnt = 0;
int n = N;
while (N--)
{
cin >> x;
if (b[x] == 1)
{
b[x] = b[a[x]] = 2;
cnt += 2;
}
else
{
b[x] = 1;
b[a[x]] = 1;
}
v.insert(x);
}
cout << n - cnt << endl;
int f = 0;
for (auto &e : v)
{
if (b[e] == 1)
{
if (f++ != 0)
cout << " ";
printf("%05d", e);
}
}
return 0;
}