lanqiao OJ 110 合根植物

简介: lanqiao OJ 110 合根植物

1.合根植物 - 蓝桥云课 (lanqiao.cn)

并查集的运用

#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std ;
const int N = 1e6 + 10 ;
int p[N] ;//i的父节点,用到了路径压缩,所以记录的是祖宗节点
int find(int x){//这里路径压缩
  if(p[x] != x) p[x] = find(p[x]) ;//找x的祖宗节点,如果x不是祖宗节点 ,那就找x的父节点的父节点
  return p[x] ; 
}
map<int,bool> mp ;
 
int main(){
  int m , n ;
  cin >> m >> n ;
  int k ;  cin >> k ;
  for(int i = 1 ; i <= m * n ; i ++) p[i] = i ;
  for(int i = 0 ; i < k ; i ++){
    int a, b ; cin >> a >> b ;
    p[find(a)] = find(b) ;
  }
//  for(int i = 1 ; i <= m*n ; i ++){
//    int q = find(i) ;
//  }
  int ans = 0 ;
//  for(int i = 1 ; i <= m*n ; i ++){//这是用根节点的数量也就是祖宗节点的数量计算合根植物的最终数量
//    if(i==find(i)) ans++ ;
//  }
  for(int i = 1 ; i <= n*m ; i ++){//这是用map来判重一波
    int a = find(i) ;
    if(!mp[a]){
      mp[a] = true ;
      ans ++ ;
    } 
  }
  cout << ans << endl ;
  return 0 ;
}
目录
相关文章
|
2月前
lanqiao OJ 1447 砝码称重
lanqiao OJ 1447 砝码称重
31 1
|
2月前
lanqiao OJ 22年省赛 扫雷
lanqiao OJ 22年省赛 扫雷
32 1
|
2月前
lanqiao OJ 1505 剪邮票
lanqiao OJ 1505 剪邮票
30 0
|
2月前
lanqiao OJ 364 跳石头
lanqiao OJ 364 跳石头
36 6
|
2月前
lanqiao OJ 99 分巧克力
lanqiao OJ 99 分巧克力
14 1
|
2月前
lanqiao OJ 102 青蛙跳杯子
lanqiao OJ 102 青蛙跳杯子
28 0
|
2月前
lanqiao oj 1121 蓝桥公园(floyd)
lanqiao oj 1121 蓝桥公园(floyd)
44 0
|
2月前
lanqiao OJ 2097 青蛙过河
lanqiao OJ 2097 青蛙过河
15 0
|
2月前
lanqiao OJ 健身
lanqiao OJ 健身
15 0
|
2月前
|
BI
lanqiao OJ 蜗牛
lanqiao OJ 蜗牛
22 0