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 }
  • 相关阅读:
    c++关于map的find和count的使用
    leetcode Two Sum
    leetcode Group Anagrams
    机器学习常见算法分类汇总
    KD树
    偏差与方差(未完)
    线性模型
    决策树
    Linux服务器配置---ftp用户黑名单
    Linux基础命令---mkdir
  • 原文地址:https://www.cnblogs.com/li-yaoyao/p/9524952.html
Copyright © 2011-2022 走看看