主要思路就是:
利用数组做标记,先输入ID以后,只要不是朋友圈只有自己一个人的(特殊值,只有自己一个人在朋友圈的人),就把相应的数组那个位置标志为-1,然后验证的时候,访问那个ID的数组,如果还是初始值0的话,就说明先前没有被标记过,也就是我们要找的那些数,然后就输出就好了,其中空格的位置利用了一个小技巧。

输入样例1:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
8
55555 44444 10000 88888 22222 11111 23333 88888

#include<iostream>

using namespace std;

int main()
{
	int a[99999]={0};//开辟数组a用来为ID标记,初始标记为0。(之所以开到99999是取到了ID的最大值) 
	int N;
	cin>>N;
	int K;
	int ID;
	for(int i=0;i<N;i++)
	{
		cin>>K;
		for(int j=0;j<K;j++)
		{//遍历-输入每个朋友圈的ID 
			cin>>ID;
			if(K!=1)//如果 K==1,那就是只有自己一个人在朋友圈的人(帅到没朋友的特殊值) 
			{//如果朋友圈人数>1,把每一个ID对应的数组位置标记为-1 
				a[ID]=-1;
			}
		}
	}
	int M;
	int sum=0;//sum用来控制空格的输出(小技巧) 
	cin>>M;
	for(int i=0;i<M;i++)
	{//遍历-输入 
		cin>>ID;	
			if(a[ID]==0)
			{//这些人都帅到没朋友 
				if(sum!=0)
				{
					cout<<" ";
				}
				printf("%05d",ID);
				a[ID]=-1;
				sum++;	
			}
	}
	if(sum==0)
	{//这些人都不够帅(这些人的标记都为-1) 
		cout<<"No one is handsome"<<endl;
	 } 
	return 0;
}