zoukankan      html  css  js  c++  java
  • P(洛谷)1551——亲戚(并、查)

    题目:https://www.luogu.org/problem/show?pid=1551

    想法:这一题属于并查集的基本应用。具体代码和步骤如下:

    代码:

     1 #include<stdio.h>
     2 int f[20010]; //f[i]表示人i所连接的人
     3 int find(int a) //查,查a连接在哪个上面
     4 {
     5     if(f[a]!=a)//说明还没有找到最上面的箱子
     6         f[a]=find(f[a]);//查询并压缩
     7     return f[a];
     8 }
     9 void combine(int x,int y) //并,将连人x,y相连
    10 {
    11     int a,b;
    12     a=find(x);
    13     b=find(y);
    14     if(a!=b)//两箱子连接的根源箱子不一样
    15         f[a]=b;//让两者的根相连,避免有些箱子丢掉了根,去连别人了
    16     else return;
    17 }
    18 int main()
    19 {
    20     int N,M,m;
    21     int a,b;
    22     scanf("%d %d %d",&N,&M,&m); //给每个元素建立一个集合
    23     for(int i = 1 ; i <= N ; ++i) f[i] = i; //初始化,自己连在自己身上
    24     //
    25     for(int i = 0 ; i < M ; ++i)
    26     {
    27         scanf("%d%d",&a,&b);
    28         combine(a,b);
    29     }
    30     //查询
    31     while(m--)
    32     {
    33         scanf("%d%d",&a,&b);
    34         a = find(a);
    35         b = find(b);
    36         if(a == b)
    37             printf("Yes
    ");
    38         else printf("No
    ");
    39     }
    40     return 0;
    41 }
  • 相关阅读:
    安装thrift时,注意openssl参数
    Linux下boost编译安装
    super-smack
    算术运算指令
    C/C++中有关字长与平台无关的整数类型
    URLTester2.3.2
    第20课 链接过程简介
    第19课 编译过程简介
    第18课 三目运算符和逗号表达式
    第17课 ++和--操作符分析
  • 原文地址:https://www.cnblogs.com/li-yaoyao/p/9524952.html
Copyright © 2011-2022 走看看