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 ;
}
相关文章
lanqiao OJ 364 跳石头
lanqiao OJ 364 跳石头
lanqiao OJ 1447 砝码称重
lanqiao OJ 1447 砝码称重
lanqiao OJ 3513 岛屿个数(2023省赛)
lanqiao OJ 3513 岛屿个数(2023省赛)
lanqiao OJ 99 分巧克力
lanqiao OJ 99 分巧克力
lanqiao OJ 525 传球游戏
lanqiao OJ 525 传球游戏
lanqiao OJ 22年省赛 扫雷
lanqiao OJ 22年省赛 扫雷
lanqiao OJ 182 小朋友崇拜圈
lanqiao OJ 182 小朋友崇拜圈
lanqiao OJ 89 路径之谜
lanqiao OJ 89 路径之谜
lanqiao OJ 1505 剪邮票
lanqiao OJ 1505 剪邮票
|
1天前
|
机器人
lanqiao OJ 118 机器人塔
lanqiao OJ 118 机器人塔