博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 5652(并查集)
阅读量:4473 次
发布时间:2019-06-08

本文共 1636 字,大约阅读时间需要 5 分钟。

题意:很久之前,在中国和印度之间有通路,通路可以简化为一个n*m的字符串,0表示能通过,1表示障碍,每过一年就有一个坐标变成1,问你什么时候,通路彻底无法通过;

解题思路:无向图的连通性,一般直接搜索或者并查集判定,这里用的是并查集,我们把相连的障碍放到一个集合内,然后如果第一列的某点和最后一列的某点也在这个集合内,那么说明,这个通路被障碍堵死了;

这里要处理下第一列和最后一列的问题,可以选择

#include
#include
#define N 605using namespace std;int next1[8][2]={
{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};int dx[]={-1,-1,-1,0,0,1,1,1};int dy[]={-1,0,1,-1,1,-1,0,1};int f[N*N];char a[N][N];int findf(int x){ if(f[x]==x) return x; else findf(f[x]);}void join(int x,int y){ int t1=findf(x); int t2=findf(y); if(t1!=t2) f[t2]=t1;}int main(){ int tx,ty; int n,m; int t; int tt; cin>>t; while(t--) { cin>>n>>m; int s,e; s=n*m;e=s+1; for(int i=0;i<=e;i++) f[i]=i; for(int i=0;i
>a[i][j]; for(int i=0;i
=n||ty>=m||a[tx][ty]=='0') continue; join(i*m+j,tx*m+ty); } } cin>>tt; int x,y; int flag=-1; for(int i=1;i<=tt;i++) { cin>>x>>y; if(flag!=-1) continue; a[x][y]='1'; for(int k=0;k<8;k++) { tx=x+dx[k];ty=y+dy[k]; if(tx<0||ty<0||tx>=n||ty>=m||a[tx][ty]=='0') continue; join(tx*m+ty,x*m+y); } if(findf(s)==findf(e)) flag=i; } cout<
<

  

添加两点,一点和第一列所有点合并,另一点和最后一列所有点合并,如果这两点在一个集合内了,说明两列内有点在一个集合;

 

转载于:https://www.cnblogs.com/huangdao/p/8835506.html

你可能感兴趣的文章
android fragmentstatepageradapter框架,Android FragmentStatePagerAdapter
查看>>
html自适应meta标签,自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结...
查看>>
html怎么加入编辑器,HTML 编辑器
查看>>
python发挥程度_你为什么用 Python?
查看>>
file 选择的文件胖多有多大_「HTML5 进阶」FileAPI 文件操作实战,内附详细案例,建议收藏...
查看>>
玄惭 mysql_阿里云数据库专家玄惭的“武功”全记录之最佳实践、双十一特别篇...
查看>>
c mysql 时间段查询_mySql 时间段查询
查看>>
mysql sql乱码怎么解决_MYSQL数据库导入SQL文件出现乱码如何解决
查看>>
mysql的存储过程与事务_mysql的存储过程与事务入门
查看>>
java程序员闯关题网站_Java程序员每周必逛的十大学习网站
查看>>
python面试装饰器_Python测开面试题之装饰器
查看>>
flashcache mysql_flashcache的实现与分析
查看>>
linux shell 里面执行python 程序_Linux下编写脚本Shell和Python的区别?
查看>>
python中if elif语句优化_python – 最有效的方式做一个if-elif-elif-else语句当else做的最多?...
查看>>
win10 配置 maven_home 一会儿成功一会儿失败_在macbook上运行移动硬盘里的win10和macos...
查看>>
python怎么画多重饼状图_Python通过matplotlib画双层饼图及环形图简单示例
查看>>
棋盘最短路径 python_Dijkstra 最短路径算法 Python 实现
查看>>
eclipse配置mysql教程_在Eclipse连接mysql-----配置jbdc_MySQL
查看>>
java map合并_java 实现合并map示例Demo1
查看>>
java 8 string_String.join() --Java8中String类新增方法
查看>>