藍橋杯:歷年試題PREV-54—合根植物
阿新 • • 發佈:2018-12-17
並查集得到各點連通性,遍歷並查集陣列計數根節點。
#include<stdio.h> #include<stdlib.h> int getf(int *array,int num) { if(array[num]==num) return num; else { array[num]=getf(array,array[num]); return array[num]; } } void unionf(int *array,int m,int n) { int i=getf(array,m); int j=getf(array,n); if(i!=j) array[j]=i; return; } int main(int argc,char **argv) { int m,n,i,j; scanf("%d%d",&m,&n); int *array=(int*)calloc(m*n+1,sizeof(int)); for(i=1;i<=m*n;i++) array[i]=i; int cnt; scanf("%d",&cnt); while(cnt--) { int sa,sb; scanf("%d%d",&sa,&sb); unionf(array,sa,sb); } int sum=0; for(i=1;i<=m*n;i++) if(i==array[i]) sum++; printf("%d\n",sum); return EXIT_SUCCESS; }