[甲级传送门](https://www.patest.cn/contests/pat-a-practise/1121
)
乙级传送门
#include<stdio.h>
#include<vector>
#define MAX_N 100100
#include<algorithm>
using namespace std;
struct P{
int partner;
P(){
partner=-1;
}
}p[MAX_N];
vector<int> v,res;
bool visited[MAX_N]={false};
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
int temp1,temp2;
scanf("%d%d",&temp1,&temp2);
p[temp1].partner=temp2;
p[temp2].partner=temp1;
}
int m;
scanf("%d",&m);
for(int i=0;i<m;i++){
int num;
scanf("%d",&num);
visited[num]=true;
v.push_back(num);
}
sort(v.begin(),v.end());
for(int i=0;i<v.size();i++){
if(p[v[i]].partner==-1) res.push_back(v[i]);
else if(visited[p[v[i]].partner]==false){
res.push_back(v[i]);
}
}
printf("%d\n",res.size());
for(int i=0;i<res.size();i++){
printf("%05d",res[i]);
if(i!=res.size()-1){
printf(" ");
}
}
}

本文提供了一道PAT甲级编程题的解决方案,通过C++实现,主要讲解了如何处理结点配对问题,包括输入结点对、标记已知结点、排序并找出未配对或其配对未被访问的结点。
1247

被折叠的 条评论
为什么被折叠?



