标签:roo post 关于 历届试题 代码 一个 ++ efi 循环
问题描述
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int MAX = 0x3f3f3f; 4 int pre[MAX]; 5 int m,n; 6 int s; 7 int left1,right1; 8 void init(int n){ 9 for(int i=1;i<=n;i++){ 10 pre[i]=i; 11 } 12 } 13 int find_pre(int key) 14 { 15 int temp=key; 16 while(temp!=pre[temp]){ 17 temp=pre[temp]; 18 } 19 int t=0; 20 while(key!=temp){//压缩 21 t=pre[key]; 22 pre[key]=temp; 23 key=t; 24 } 25 return temp; 26 } 27 28 void unite(int x,int y) 29 { 30 int rootx=find_pre(x); 31 int rooty=find_pre(y); 32 if(rootx!=rooty) pre[rootx]=rooty; 33 34 } 35 int main() 36 { 37 cin >> m >> n; 38 int all=m*n; 39 cin >> s; 40 init(all); 41 for(int i=1;i<=s;i++){ 42 cin >> left1 >> right1; 43 unite(left1,right1); 44 } 45 46 int att[MAX]; 47 int num=0; 48 memset(att,0,sizeof(att)); 49 for(int i=1;i<=all;i++){ 50 att[find_pre(i)]=1; 51 } 52 for(int i=1;i<=all;i++){ 53 if(att[i]==1) num++; 54 } 55 cout << num; 56 return 0; 57 }
所以在通常的场合下,const int INF = 0x3f3f3f3f;真的是一个非常棒的选择。
标签:roo post 关于 历届试题 代码 一个 ++ efi 循环
原文地址:https://www.cnblogs.com/henuliulei/p/10546228.html