zoukankan      html  css  js  c++  java
  • 并查集 【入门题】

    本人水平有限,题解不到为处,请多多谅解

    本蒟蒻谢谢大家观看

    题目传送门

    此题用并查集来解决是否是连通的问题

    code:

     1 #include<bits/stdc++.h>
     2 #pragma GCC optimize(3)
     3 const int N=4e6+10;
     4 const int mod=998244353;
     5 using namespace std;
     6 int n,m,ans;
     7 int fa[N];
     8 inline int read(){
     9     int x=0,f=1;char ch=getchar();
    10     while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
    11     while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    12     return x*f;
    13 }
    14 inline void write(int x)
    15 {
    16     if(x<0)x=-x,putchar('-');
    17     if(x>9)write(x/10);
    18     putchar(x%10+'0');
    19 }
    20 int find(int x){
    21     if(fa[x]==x)return x;
    22     return fa[x]=find(fa[x]);//并查集的扁平化 
    23 }
    24 int main()
    25 {
    26     n=read(),m=read();
    27     for(int i=0;i<n;i++){
    28         fa[i]=i;
    29     }
    30     for(int i=1,opt,u,v;i<=m;i++){
    31         opt=read();
    32         u=read();
    33         v=read();
    34         int fx=find(u),fy=find(v);
    35         if(opt==0){//当其为0时,需要连通u,v 
    36             if(fx!=fy){
    37                 fa[fx]=fy;//若之前不连通,则将他们连通 
    38             }
    39         }
    40         else{//当其为1时,判断是否连通 
    41             if(fx==fy){
    42                 ans=(ans*2+1)%mod;//若为连通,则为 1 ,转换二进制 
    43             }
    44             else{
    45                 ans=(ans*2)%mod;//若不连通,则为0 ,转换二进制 
    46             }
    47         }
    48     }
    49     printf("%d
    ",ans);
    50     return 0;
    51 }
  • 相关阅读:
    Python 面向对象
    Python __str__()
    数据降维
    高并发相关概念
    centos7下安装kubernetes1.18
    OB-运行日志
    OB-租户(Tenant)管理
    OB-资源管理(Resource Unit/Pool)
    [转载]-基于 VMWARE Oracle Linux7.9 安装 Oracle19c RAC 详细配置方案
    OB-管理oceanbase集群参数
  • 原文地址:https://www.cnblogs.com/nlyzl/p/11787614.html
Copyright © 2011-2022 走看看