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 ;
}
目录
相关文章
|
1月前
lanqiao OJ 22年省赛 扫雷
lanqiao OJ 22年省赛 扫雷
29 1
|
1月前
lanqiao OJ 1388 寒假作业
lanqiao OJ 1388 寒假作业
32 0
|
1月前
lanqiao OJ 364 跳石头
lanqiao OJ 364 跳石头
33 6
|
1月前
lanqiao OJ 389 摆花
lanqiao OJ 389 摆花
15 2
|
1月前
lanqiao OJ 1032 画廊
lanqiao OJ 1032 画廊
17 2
|
29天前
lanqiao oj 17136 星球(状态压缩dp)
lanqiao oj 17136 星球(状态压缩dp)
8 0
|
1月前
lanqiao OJ 234 大胖子走迷宫
lanqiao OJ 234 大胖子走迷宫
9 0
|
1月前
lanqiao OJ 102 青蛙跳杯子
lanqiao OJ 102 青蛙跳杯子
23 0
|
29天前
lanqiao oj Frog
lanqiao oj Frog
20 0
|
30天前
lanqiao OJ 207 大臣的旅费(两次dfs)
lanqiao OJ 207 大臣的旅费(两次dfs)
11 0