zoukankan      html  css  js  c++  java
  • 喵哈哈村的代码传说 第四章 并查集

    有一个非常大的村子,叫做喵哈哈村,一开始他们都互相不认识,但是渐渐地,他们就会相互来往,所以就会有以下问题的产生:

    1 x y,x家与y家成为朋友

    2 x y,提问x家和y家是否为朋友,间接成为朋友也算。

    本题包含若干组测试数据。
    第一行两个整数n,m,表示这个村子有n户家庭,一开始他们都不认识。含有m个问题。
    接下来m行:
    1 x y
    2 x y
    分别表示操作和询问。
    满足1<=n,m<=100000,注意x

    是朋友输出Yes,否则输出N

     复制
    3 4
    2 1 2
    2 1 1
    1 1 2
    2 1 2
    No
    Yes
    Yes
    这题比赛的时候没有做出来,比赛后看了大佬的代码才知道并查集这么好用,递归用的好神奇。
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn = 1e5+6;
     4 int n,m;
     5 int fa[maxn];
     6 int fi(int x){
     7     return fa[x]==x?x:fa[x]=fi(fa[x]);
     8 }
     9 void uni(int x,int y){
    10     x = fi(x),y = fi(y);
    11     fa[x]=y;
    12 }
    13 void solve(){
    14     for(int i=1;i<=n;i++)fa[i]=i;
    15     for(int i=0;i<m;i++){
    16         int a,b,c;
    17         scanf("%d%d%d",&a,&b,&c);
    18         if(a==1){
    19             uni(b,c);
    20         }else{
    21             if(fi(b)==fi(c)){
    22                 cout<<"Yes"<<endl;
    23             }else{
    24                 cout<<"No"<<endl;
    25             }
    26         }
    27     }
    28 }
    29 int main(){
    30     while(cin>>n>>m)solve();
    31     return 0;
    32 }
  • 相关阅读:
    APP Https双向认证抓包
    剖析XSS
    php连接mysql
    linux去掉某一字符开头的行
    memcached+php客户端
    memcached-repcached
    memcached+memadmin
    Linux GPT分区
    Linux查看文件夹大小
    linux挂载windwos共享文件
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/6547914.html
Copyright © 2011-2022 走看看