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 ;
}
目录
相关文章
|
3天前
lanqiao OJ 1447 砝码称重
lanqiao OJ 1447 砝码称重
12 1
|
3天前
lanqiao OJ 1505 剪邮票
lanqiao OJ 1505 剪邮票
10 0
|
3天前
lanqiao OJ 689 四阶幻方
lanqiao OJ 689 四阶幻方
10 0
|
3天前
lanqiao OJ 364 跳石头
lanqiao OJ 364 跳石头
18 6
|
3天前
lanqiao OJ 3513 岛屿个数(2023省赛)
lanqiao OJ 3513 岛屿个数(2023省赛)
9 2
|
3天前
lanqiao OJ 99 分巧克力
lanqiao OJ 99 分巧克力
8 1
|
1天前
lanqiao OJ 健身
lanqiao OJ 健身
5 0
|
1天前
lanqiao oj 1121 蓝桥公园(floyd)
lanqiao oj 1121 蓝桥公园(floyd)
6 0
|
1天前
lanqiao oj 1135 蓝桥幼儿园(并查集)
lanqiao oj 1135 蓝桥幼儿园(并查集)
6 0
|
2天前
lanqiao OJ 2097 青蛙过河
lanqiao OJ 2097 青蛙过河
6 0