L3-003 社交集群(30 分)

川长思鸟来 2022-05-23 11:21 270阅读 0赞

在社交网络平台注册时,用户通常会输入自己的兴趣爱好,以便找到和自己兴趣相投的朋友。有部分兴趣相同的人们就形成了“社交集群”。现请你编写程序,找出所有的集群。

输入格式:

输入的第一行给出正整数N(<=1000),即社交网络中的用户总数(则用户从1到N编号)。随后N行,每行按下列格式列出每个人的兴趣爱好:

K~i~: h~i~[1] h~i~[2] … h~i~[K~i~]

其中K~i~(>0)是第i个人的兴趣的数量,h~i~[j]是第i个人的第j项兴趣的编号,编号范围为[1,1000]内的整数。

输出格式:

首先在第一行输出整个网络中集群的数量,然后在第二行按非递增的顺序输出每个集群中用户的数量。数字间以1个空格分隔,行首尾不得有多余空格。

输入样例:

  1. 8
  2. 3: 2 7 10
  3. 1: 4
  4. 2: 5 3
  5. 1: 4
  6. 1: 3
  7. 1: 4
  8. 4: 6 8 1 5
  9. 1: 4

输出样例:

  1. 3
  2. 4 3 1

代码:

  1. #include<stdio.h>
  2. #include<algorithm>
  3. using namespace std;
  4. int farther[1010],hobby[1010],clusters[1010];
  5. bool cmp(int a,int b)
  6. {
  7. return a>b;
  8. }
  9. int find(int x)
  10. {
  11. while(x!=farther[x])
  12. {
  13. x=farther[x];
  14. }
  15. return x;
  16. }
  17. void Union(int a,int b)
  18. {
  19. int findA=find(a);
  20. int findB=find(b);
  21. if(findA!=findB)
  22. {
  23. farther[findA]=findB;
  24. }
  25. }
  26. int main()
  27. {
  28. int i,j,n,m,k,t,cnt;
  29. scanf("%d",&n);
  30. for(i=1;i<=n;i++)
  31. {
  32. farther[i]=i;
  33. }
  34. for(i=1;i<=n;i++)
  35. {
  36. scanf("%d:",&m);
  37. for(j=0;j<m;j++)
  38. {
  39. scanf("%d",&k);
  40. if(hobby[k]==0)
  41. {
  42. hobby[k]=i;
  43. }
  44. Union(i,find(hobby[k]));
  45. }
  46. }
  47. for(i=1;i<=n;i++)
  48. {
  49. clusters[find(i)]++;
  50. }
  51. cnt=0;
  52. for(i=1;i<=n;i++)
  53. {
  54. if(clusters[i]!=0)
  55. {
  56. cnt++;
  57. }
  58. }
  59. printf("%d\n",cnt);
  60. sort(clusters,clusters+n+1,cmp);
  61. for(i=0;i<cnt;i++)
  62. {
  63. if(i==0)
  64. {
  65. printf("%d",clusters[i]);
  66. }
  67. else
  68. {
  69. printf(" %d",clusters[i]);
  70. }
  71. }
  72. printf("\n");
  73. return 0;
  74. }

发表评论

表情:
评论列表 (有 0 条评论,270人围观)

还没有评论,来说两句吧...

相关阅读

    相关 L3-005 垃圾箱分布(30

    大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁都不愿意守着垃圾箱住。所以垃圾箱的位置必须选在到所有居民点的最短距离最长的地方,同时还要保证每个居民点都在距离它一个不太远的

    相关 L3-003 社交30

    在社交网络平台注册时,用户通常会输入自己的兴趣爱好,以便找到和自己兴趣相投的朋友。有部分兴趣相同的人们就形成了“社交集群”。现请你编写程序,找出所有的集群。 输入格式: 输

    相关 L3-002 堆栈(30

    大家都知道“堆栈”是一种“先进后出”的线性结构,基本操作有“入栈”(将新元素插入栈顶)和“出栈”(将栈顶元素的值返回并从堆栈中将其删除)。现请你实现一种特殊的堆栈,它多了一种操

    相关 L3-003 社交 并查

    L3-003 社交集群 (30 分) 当你在社交网络平台注册时,一般总是被要求填写你的个人兴趣爱好,以便找到具有相同兴趣爱好的潜在的朋友。一个“社交集群”是指部分兴趣爱好相同