ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

并查集 浙师大oj1212

2021-10-30 19:58:28  阅读:222  来源: 互联网

标签:int 查集 浙师大 亲戚 else oj1212 sl Input include


亲戚——高级

Time Limit: 1000MSMemory Limit: 65536K
Total Submissions: 299Accepted: 129

Description

若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的某个人所在家族的人数。
规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。

Input

第一行:三个整数n,(n<=100,000,m<=200,000),分别表示有n个人,m个信息。
以下m行:信息包含两种形式:
M a b:表示a和b具有亲戚关系。
Q a:要求输出a所在家族的人数。

Sample Input

5 10 M 3 2 Q 4 M 1 2 Q 4 M 3 2 Q 1 M 3 1 Q 5 M 4 2 Q 4

Sample Output

1 1 3 1 4

#include <stdio.h>
#include <string.h>
struct A
{
  int s;
  int sl;
};
struct A a[100001];
int main()
{
    int n,m,y,z,x,k;
    char r;
    for(int i=1;i<=100001;i++)
    {
      a[i].s=i;a[i].sl=1;
    }
    while(scanf("%d%d",&n,&m)!=EOF)
    {
      getchar();
      for(int i=1;i<=m;i++)
      {
        scanf("%c",&r);
        getchar();
        if(r=='M')
        {
          scanf("%d%d",&z,&y);getchar();
          while(a[z].s!=z){z=a[z].s;}\\寻找初始地址也就是亲戚数所存的位置
          while(a[y].s!=y){y=a[y].s;}          
          if(a[z].s!=a[y].s)
          {
          if(a[a[z].s].sl>a[a[y].s].sl){x=a[z].s;k=a[y].s;}
          else{x=a[y].s;k=a[z].s;}
          a[a[y].s].s=x;
          a[a[z].s].s=x;
          if(x!=k){a[x].sl+=a[k].sl;}
          else{a[x].sl++;}
          }
        }
        if(r=='Q'){scanf("%d",&x);getchar();while(a[x].s!=x){x=a[x].s;}printf("%d\n",a[a[x].s].sl);}
      }
    }
  return 0;                                                   
}

让所有亲戚的值放在1个地址上,然后所有该人的亲戚的亲戚数位置指向该人地址

标签:int,查集,浙师大,亲戚,else,oj1212,sl,Input,include
来源: https://blog.csdn.net/weixin_59398528/article/details/121055569

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有