水题,但是通过这一题需要改进一点;对于hash赋初值的时候一定要谨慎一点,不要随便赋值0,视输入的数据而定;#include<iostream>#include<stdlib.h>#include<stdio.h>#include<vector>#include<set>using namespace std;using std::vector;using std::set;const int maxn=100100;int mem[maxn]={-1};bool vis[maxn]={false};vector<int>output;set<int>out;int main(){ int n; int a,b; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d%d",&a,&b); mem[a]=b; mem[b]=a; } scanf("%d",&n); bool flag=true; for(int i=0;i<n;i++){ scanf("%d",&a); vis[a]=true; } for(int i=0;i<maxn;i++){ if(vis[i]){ if(mem[i]==-1){ //如果是没结婚 out.insert(i); }else{ //看看另一个成员来没来 if(!vis[mem[i]]) out.insert(i); } } } printf("%d\n",out.size()); bool f=true; for(set<int>::iterator it=out.begin();it!=out.end();it++){ if(f){ printf("%05d",*it); f=false; } else printf(" %05d",*it); } system(“pause”); return 0;}