L - Farm Irrigation (并查集
给你一个管道地图,求联通块个数
很简单的并查集,简单预处理输入一下
但zoj能过,hdu就是莫名其妙的wa
后来发现是我地图的表示时边界的处理有问题
例如
ABD
KJH
KNG
我把这个矩阵读取成一行:ABDKJHKNG
对于第i个元素 上下左右就表示为 ut=i - n ,lt=i -1 ,rt=i+1 ,dt=i+n;
判断边界: ut>0 i%n !=1 i%n !=0 dt<=m*n
这样平常没什么问题,所以zoj能过
但是。。。 当矩阵宽度为1时,左右边界就会合并,这时判断 左边界 i%n !=1 就会出错,因为此时“余1” 就是 余0
所以要特判一下1.。。。
以后这种情况要特别注意(不过再碰到题我可能就不这样表示上下左右了)
#include <cstdio> #include <iostream> #include <string> #include <cstring> #include <algorithm>using namespace std;int pre[500000]; int node[500000]; const int u[50 ]={1,1,0,0,1,0,1,1,0,1,1}; const int l [50 ]={1,0,1,0,0,1,1,1,1,0,1}; const int r [50 ]={0,1,0,1,0,1,1,0,1,1,1}; const int d[50 ]={0,0,1,1,1,0,0,1,1,1,1};void init( int n){for( int i=0 ;i<=n;i++)pre[i] = i; }int find( int x){int r= x;while( pre[x] != x){x= pre[x];}int t;while( r!=x){t = pre[r];pre[r] = x;r = t;}return x; }void add( int a ,int b){// cout<<a <<' '<<b<<endl;int x=find(a);int y=find(b);if( x!=y) pre[x] =y;return ; }int main( ){int m ,n;while( cin>>m>>n){if( m<0 || n<0) break;int an = m*n;init( an);string op;int cnt = 1;for( int i=1 ;i<=m ;i++){cin>> op;for( int j=0 ; j<n ;j++)node[cnt++] =(int)(op[j]-'A');}for( int i=1 ;i<=an ;i++){int t=node[i];int ut=i - n ,lt=i -1 ,rt=i+1 ,dt=i+n;if( u[ t] && ut>0 && d[ node[ut] ])add(i ,ut);if( l[ t] && i%n !=1 && n !=1 && r[ node[lt] ])add(i ,lt); //就是这一行if( r[ t] && i%n !=0 && n !=1&& l[ node[rt] ])add(i ,rt);if( d[ t] && dt<=an && u[ node[dt] ])add(i ,dt);}int ans=0;for( int i=1 ; i<=an ;i++){if( pre[i] == i)ans++;// cout<<i<<' '<<pre[i]<<endl; }printf("%d\n" ,ans);}return 0; }
转载于:https://www.cnblogs.com/-ifrush/p/10660433.html
L - Farm Irrigation (并查集相关推荐
- hdu1198 Farm Irrigation —— dfs or 并查集
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1198 dfs: 1 #include<cstdio>//hdu1198 dfs 2 #in ...
- 一道并查集的(坑)题:关闭农场closing the farm
题目描述 in English: Farmer John and his cows are planning to leave town for a long vacation, and so FJ ...
- [L氏并查集] Python 列表法实现非递归并查集,轻松权重优化。
一般的并查集都是用递归或者新建一个类来实现,这里介绍一种用Python来实现的非递归非函数并查集,这个方法暂时未在其他地方见过,尤其是中文领域目前还未见过,很可能是搜索引擎无法搜索到正确内容的原因,所 ...
- 并查集入门+初级专题训练
介绍 摘自罗勇军,郭卫斌的<算法竞赛入门到进阶>上的说明: 并查集(Disjoint Set)是一种非常精巧而且食用的数据结构,它主要用于处理一些不相交集合的合并问题.经典的例子有 ...
- 【转】并查集MST题集
转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU] 1213 How Many Tables 基础并查集★ 1272 小希的迷宫 ...
- POJ1984 Navigation Nightmare —— 种类并查集
题目链接:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K T ...
- POJ 1984 Navigation Nightmare 【经典带权并查集】
任意门:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K To ...
- 并查集训练题解(F-J)
训练链接:http://acm.njupt.edu.cn/vjudge/contest/view.action?cid=173#overview F题 Navigation Nightmare Tim ...
- 并查集小结 (参考birdfly+修改)
并查集的作用:并和查,即合并和查找,将一些集合合并,快速查找或判断某两个集合的关系,或某元素与集合的关系,或某两个元素的关系. 并查集的结构:并查集主要操作对象是森林,树的结构赋予它独特的能力,对整个 ...
- HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...
最新文章
- uniapp 分享缩略图过大怎么办_女性胸外扩怎么办|3步带你完成改变
- 单片机编程简单吗?arduino为什么不适合大学生?
- 《iOS 9应用开发入门经典(第7版)》——第1章,第1.6节小结
- CocoaPods 的使用与一些异常情况的处理
- 汇编基础知识之输入输出
- 五分钟带你摸透 Vue组件及组件通讯
- rust加载不进去服务器eac_基于腾讯云的 Rust 和 WebAssembly 函数即服务
- java数组与C++数组间的区别
- python编程考试_《Python程序设计》试题库
- JavaScript RegExp(正则)
- 高级工计算机操作试题及答案,计算机系统操作高级工试题和答案[1]
- NUC1429 WERTYU【输入输出+水题】
- java提取省市县乡镇村
- 在商业化道路上,小冰还要再多走几步
- java 只保留字母_java编程问题,急急急!输入一个字符串,如果字符串中存在字母a的次数大于1,则只保留第一个a,...
- 计算机考试a bcd哪一级难,2014计算机一级考试试题:WPS及基础题
- 北京十大著名拆迁律师事务所(精品拆迁律师)
- camera 自动对焦手动对焦
- Enhancement
- python开源oa系统_最全总结 | 聊聊 Python 办公自动化之 Word(下)
热门文章
- 前后端分离项目如何部署_不用Docker前后端分离项目如何快速部署
- 约束最优化方法 (一) 最优性条件
- ubuntu16.04下ROS操作系统学习笔记(七 )机器语音-语音听写-科大讯飞SDK调用
- ubuntu16.04中ROS-Kinetic安装Arbotix
- 键盘各键对应的ASCII码值(包括鼠标和键盘所有的键)
- Hive metastore整体代码分析及详解
- Android获取前台进程的方法
- 把 Reative Native 47 版本集成到已有的 Native iOS 工程中
- Bzoj 2154: Crash的数字表格(积性函数)
- spring集成mybatis后怎么在控制台打印sql语句