Farm Irrigation
2015-10-21 23:01
309 查看
题目:Farm Irrigation
题目链接:http://210.34.193.66:8080/vj/Problem.jsp?pid=1494
题目思路:并查集
AC代码
题目链接:http://210.34.193.66:8080/vj/Problem.jsp?pid=1494
题目思路:并查集
#include<stdio.h> //并查集重点就是实现:查询某点在哪个集合、将两个集合合并 //查找点的祖先 int a[10000]; int fun(int x) { int p=x; // 初始化数组 a[i]=i; // 也就是说当 a[i]==i 时,这是一个祖先,或者他是别人的子树 while(a[p]!=p) { p=a[p]; } // p就是祖先,下面是路径压缩 int q=x; while(a[q]!=p) { x=a[q]; a[q]=p; q=x; } return p; } //合并两个集合 void join(int x,int y) { int xt=fun(x); int yt=fun(y); if(xt!=yt) { a[xt]=yt; } } int n,m; int bian(int i,int j) { return i*m+j; } int islian_heng(char c1,char c2) { if(c1=='B') { if(c2=='A'||c2=='C'||c2=='F'||c2=='G'||c2=='H'||c2=='I'||c2=='K') return 1; else return 0; } else if(c1=='D') { if(c2=='A'||c2=='C'||c2=='F'||c2=='G'||c2=='H'||c2=='I'||c2=='K') return 1; else return 0; } else if(c1=='F') { if(c2=='A'||c2=='C'||c2=='F'||c2=='G'||c2=='H'||c2=='I'||c2=='K') return 1; else return 0; } else if(c1=='G') { if(c2=='A'||c2=='C'||c2=='F'||c2=='G'||c2=='H'||c2=='I'||c2=='K') return 1; else return 0; } else if(c1=='I') { if(c2=='A'||c2=='C'||c2=='F'||c2=='G'||c2=='H'||c2=='I'||c2=='K') return 1; else return 0; } else if(c1=='J') { if(c2=='A'||c2=='C'||c2=='F'||c2=='G'||c2=='H'||c2=='I'||c2=='K') return 1; else return 0; } else if(c1=='K') { if(c2=='A'||c2=='C'||c2=='F'||c2=='G'||c2=='H'||c2=='I'||c2=='K') return 1; else return 0; } else return 0; } int islian_shu(char c1,char c2) { if(c1=='C') { if(c2=='A'||c2=='B'||c2=='E'||c2=='G'||c2=='H'||c2=='J'||c2=='K') return 1; else return 0; } else if(c1=='D') { if(c2=='A'||c2=='B'||c2=='E'||c2=='G'||c2=='H'||c2=='J'||c2=='K') return 1; else return 0; } else if(c1=='E') { if(c2=='A'||c2=='B'||c2=='E'||c2=='G'||c2=='H'||c2=='J'||c2=='K') return 1; else return 0; } else if(c1=='H') { if(c2=='A'||c2=='B'||c2=='E'||c2=='G'||c2=='H'||c2=='J'||c2=='K') return 1; else return 0; } else if(c1=='I') { if(c2=='A'||c2=='B'||c2=='E'||c2=='G'||c2=='H'||c2=='J'||c2=='K') return 1; else return 0; } else if(c1=='J') { if(c2=='A'||c2=='B'||c2=='E'||c2=='G'||c2=='H'||c2=='J'||c2=='K') return 1; else return 0; } else if(c1=='K') { if(c2=='A'||c2=='B'||c2=='E'||c2=='G'||c2=='H'||c2=='J'||c2=='K') return 1; else return 0; } else return 0; } int main() { char s[100][100]; while(scanf("%d%d",&n,&m)!=EOF) { if(n==-1&&m==-1) break; for(int i=0;i<n;i++) scanf("%s",s[i]); for(int i=0;i<n*m;i++) a[i]=i; for(int i=0;i<n;i++) { for(int j=0;j<m-1;j++) { if(islian_heng(s[i][j],s[i][j+1])==1) { join(bian(i,j),bian(i,j+1)); } } } for(int i=0;i<m;i++) for(int j=0;j<n-1;j++) if(islian_shu(s[j][i],s[j+1][i])==1) { join(bian(j,i),bian(j+1,i)); } int co=0; for(int i=0;i<n*m;i++) { if(a[i]==i) co++; } printf("%d\n",co); } return 0; }
AC代码
相关文章推荐
- msql数据库的导入导出
- detach() 与remove()
- Tarena - 分组查询
- 【图文绝对详细】Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04
- Jay的中国风---天涯过客
- 数字证书原理(ssl, https)
- 简单工厂设计模式
- 天声人語 20151021 米国の最も長い戦争
- 05_03 bash
- OOP 6大基本原则
- JAVA将Excel中的报表导出为图片格式(一)问题背景
- 学习Hadoop时遇到的问题以及解决方法
- php扩展
- STL学习笔记-set/multiset容器(集合)
- Android酷炫实用的开源框架(UI框架)
- Maven(4)-利用intellij idea创建maven 多模块项目
- GTK+图形化应用程序开发学习笔记(八)—录入构件
- 稀疏表示step by step
- 数组全排列
- 序列化与反序列化