• Codeforces 278C Learning Languages(并查集) 求连通块


    Codeforces 278C Learning Languages(并查集) 求连通块
    为什么最后还要getfather 一遍 比如 x 是 y 的父亲
    然后你 Union(x,z) 然后 z 变成了 x 父亲 然后 y 的祖先就是错的了


    题解 求一个无向图中有几个连通块 sum
    特判 一下 如果 每一个人的语言都为 0 则答案为 sum
    其他 答案则为 sum - 1

     1 #include <bits/stdc++.h>
     2 using namespace std ; 
     3 
     4 const int N = 111 ; 
     5 int n,m,k,x,sum ; 
     6 int fa[N*2] ; 
     7 bool flag ; 
     8 
     9 inline int find(int x) 
    10 {
    11     if(fa[x]==x) return x ; 
    12     return fa[ x ] = find(fa[ x ]) ; 
    13 }
    14 
    15 inline void Union(int x,int y) 
    16 {
    17     x = find(x) ;  y = find(y) ; 
    18     if(x!=y) fa[ x ] = y ; 
    19 }
    20 
    21 int main() 
    22 {
    23     scanf("%d%d",&n,&m) ; 
    24     for(int i=1;i<=n+m;i++) fa[ i ] = i ;
    25     flag = 0 ;  
    26     for(int i=1;i<=n;i++) 
    27     {
    28         scanf("%d",&k) ; 
    29         if(k) flag = 1 ;  
    30         for(int j=1;j<=k;j++)
    31             scanf("%d",&x) ,Union( i,x+n ) ; 
    32     }
    33     if(!flag) 
    34     {
    35         printf("%d
    ",n) ; 
    36         return 0 ; 
    37     }
    38     for(int i=1;i<=n;i++) fa[ i ] = find(fa[ i ]) ;       
    39     sort(fa+1,fa+n+1) ; 
    40     fa[ 0 ] = -100 ; 
    41     for(int i=1;i<=n;i++) if(fa[ i ]!=fa[ i-1 ]) sum++ ; 
    42     
    43     printf("%d
    ",sum-1) ; 
    44     
    45     return 0 ; 
    46 }
  • 相关阅读:
    Laravel 项目中编写第一个 Vue 组件
    laravel 中CSS 预编译语言 Sass 快速入门教程
    Laravel 项目中使用 Bootstrap 框架
    web框架之MVC/MTV
    jQuery补充之jQuery扩展/form表单提交/滚动菜单
    jQuery前端插件以及图片延迟加载
    JavaScript正则表达式补充
    jQuery语法介绍
    DOM
    JavaScript
  • 原文地址:https://www.cnblogs.com/third2333/p/7116822.html
Copyright © 2020-2023  润新知