用c++编写程序输入格式:输入第一行给出一个正整数N≤100是已知朋友圈的个数;随后N行每行首先给出一个正整数K≤1000为朋友圈中的人数然后列出一个朋友圈内的所有人——为方便起见每人对应一个ID号为5位数字从00000到99999ID间以空格分隔;之后给出一个正整数M≤10000为待查询的人数;随后一行中列出M个待查询的ID以空格分隔。注意:没有朋友的人可以是根本没安装朋友圈也可以是只有自己一个
#include
const int N = 1e5 + 10; int p[N], cnt[N]; bool st[N];
int find(int x) { if (x != p[x]) p[x] = find(p[x]); return p[x]; }
void merge(int a, int b) { a = find(a), b = find(b); if (a != b) p[a] = b; }
int main() { for (int i = 0; i < N; i ++ ) p[i] = i; int n; cin >> n; for (int i = 0; i < n; i ++ ) { int k; cin >> k; for (int j = 0; j < k; j ++ ) { int x; cin >> x; if (cnt[x] == 0) cnt[x] = 1; merge(i, x + n); st[x] = true; } }
int m;
cin >> m;
vector<int> v;
while (m -- )
{
int x;
cin >> x;
if (cnt[x] == 0) v.push_back(x);
}
vector<int> ans;
for (int i = 0; i < v.size(); i ++ )
if (st[find(v[i] + n)] == false)
ans.push_back(v[i]), st[find(v[i] + n)] = true;
if (ans.size() == 0) puts("No one is handsome");
else
{
sort(ans.begin(), ans.end());
for (int i = 0; i < ans.size(); i ++ )
printf("%05d%c", ans[i], " \n"[i == ans.size() - 1]);
}
return 0;
} 作者:yxc 链接:https://www.acwing.com/activity/content/code/content/2726792/ 来源:AcWing 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处
原文地址: http://www.cveoy.top/t/topic/huk1 著作权归作者所有。请勿转载和采集!