博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 278C Learning Languages(并查集) 求连通块
阅读量:6331 次
发布时间:2019-06-22

本文共 1209 字,大约阅读时间需要 4 分钟。

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

为什么最后还要getfather 一遍 比如 x 是 y 的父亲
然后你 Union(x,z) 然后 z 变成了 x 父亲 然后 y 的祖先就是错的了

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

 

 

1 #include 
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",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\n",sum-1) ; 44 45 return 0 ; 46 }

 

转载于:https://www.cnblogs.com/third2333/p/7116822.html

你可能感兴趣的文章
主流的RPC框架有哪些
查看>>
Hive学习之路 (七)Hive的DDL操作
查看>>
[转]mysql使用关键字作为列名的处理方式
查看>>
awesome go library 库,推荐使用的golang库
查看>>
树形展示形式的论坛
查看>>
jdbcTemplate 调用存储过程。 入参 array 返回 cursor
查看>>
C++中的stack类、QT中的QStack类
查看>>
Linux常用基本命令[cp]
查看>>
CSS 相对|绝对(relative/absolute)定位系列(一)
查看>>
关于 Nginx 配置 WebSocket 400 问题
查看>>
Glide和Govendor安装和使用
查看>>
Java全角、半角字符的关系以及转换
查看>>
Dubbo和Zookeeper
查看>>
前端项目课程3 jquery1.8.3到1.11.1有了哪些新改变
查看>>
UOJ#179. 线性规划(线性规划)
查看>>
整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
查看>>
Isolation Forest原理总结
查看>>
windows的服务中的登录身份本地系统账户、本地服务账户和网络服务账户修改
查看>>
JAVA中循环删除list中元素的方法总结
查看>>
redis 安装
查看>>