【bzoj5049】[Lydsy九月月赛]导航系统 并查集+双向BFS最短路
题目描述
输入
输出
样例输入
6 5 5
1 2
2 3
1 3
1 4
4 5
1 3
4 2
3 5
5 1
4 6
样例输出
1
2
3
2
-1
题解
并查集+双向BFS最短路
使用并查集判断连通性,连通的话使用双向BFS求最短路求解。
由于数据随机,这样做可以通过(Claris的题解中有复杂度的证明,然而我弄丢了。。。)
注意双向广搜时两个方向搜索的应该染上不同的颜色。
#include <cstdio>
#define N 100010
#define M 600010
int f[N] , head[N] , to[M << 1] , next[M << 1] , cnt , vis[N] , dis[N] , q[N] , l , r;
inline void add(int x , int y)
{
to[++cnt] = y , next[cnt] = head[x] , head[x] = cnt;
}
int find(int x)
{
return x == f[x] ? x : f[x] = find(f[x]);
}
int solve(int x , int y , int k)
{
if(find(x) != find(y)) return -1;
int i;
l = 0 , r = -1;
vis[x] = k , dis[x] = 0 , q[++r] = x;
vis[y] = -k , dis[y] = 0 , q[++r] = y;
while(l <= r)
{
x = q[l ++ ];
for(i = head[x] ; i ; i = next[i])
{
y = to[i];
if(vis[y] == vis[x]) continue;
else if(vis[y] == -vis[x]) return dis[x] + dis[y] + 1;
else vis[y] = vis[x] , dis[y] = dis[x] + 1 , q[++r] = y;
}
}
return -1;
}
int main()
{
int n , m , k , i , x , y;
scanf("%d%d%d" , &n , &m , &k);
for(i = 1 ; i <= n ; i ++ ) f[i] = i;
for(i = 1 ; i <= m ; i ++ ) scanf("%d%d" , &x , &y) , add(x , y) , add(y , x) , f[find(x)] = find(y);
for(i = 1 ; i <= k ; i ++ ) scanf("%d%d" , &x , &y) , printf("%d\n" , solve(x , y , i));
return 0;
}
【bzoj5049】[Lydsy九月月赛]导航系统 并查集+双向BFS最短路的更多相关文章
- (并查集 or BFS+二分)HDU5652
点击打开链接 并查集: #include<cstdio> #define N 505 using namespace std; struct node { int x,y; }; char ...
- 求树的直径+并查集(bfs,dfs都可以)hdu4514
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4514 这题主要是叫我们求出树的直径,在求树的直径之前要先判断一下有没有环 树的直径指的就是一棵树上面距 ...
- 【CF659F】Polycarp and Hay(并查集,bfs)
题意: 构造一个矩阵,使得: 矩阵所有格子中数字都小于等于原矩阵,并且至少有一个元素和原矩阵相等, 构造的矩阵除了0以外的数字必须联通并且相等,矩阵中元素之和为K. n,m<=1e3,1< ...
- HDU 1272 小希的迷宫 并查集
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- bzoj 4883 [Lydsy1705月赛]棋盘上的守卫——并查集(思路!)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4883 把各行和各列看成n+m个点. 如果一下能防守行和列,就是最大匹配了.这是每两个左右部点 ...
- 牛客小白月赛28 J.树上行走 (并查集,dfs)
题意:有\(n\)个点,\(n-1\)条边,每个点的类型是\(0\)或\(1\),现在让你选一个点,然后所有与该点类型不同的点直接消失,问选哪些点之后,该点所在的联通块最大. 题解: 因为选完之后两个 ...
- bzoj5049 [Lydsy1709月赛]导航系统 双向bfs
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5049 题解 题面里面满眼的随机.既然数据完全随机,那就是在锻炼选手的乱搞能力啊. 根据一个常用 ...
- [BZOJ1854][Scoi2010]游戏(二分图匹配/并查集)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1854 分析:很裸的一道二分图匹配对吧,但是在hzwer的blog上看见神奇的并查集做法 ...
- 【bzoj3674】 可持久化并查集加强版
http://www.lydsy.com/JudgeOnline/problem.php?id=3674 (题目链接) 题意 维护并查集3个操作:合并:回到完成第k个操作后的状态:查询. Soluti ...
随机推荐
- 十分钟搭建和使用ELK日志分析系统
前言 为满足研发可视化查看测试环境日志的目的,准备采用EK+filebeat实现日志可视化(ElasticSearch+Kibana+Filebeat).题目为“十分钟搭建和使用ELK日志分析系统”听 ...
- C#调用c++类的导出函数
C# 需要调用C++东西,但是有不想做成COM,就只好先导出类中的函数处理. 不能直接调用,需单独导出函数 参考:http://blog.csdn.net/cartzhang/article/deta ...
- 成都Uber优步司机奖励政策(3月22日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- html中iframe根据子页面内容动态修改高度
JavaScript var browserVersion = window.navigator.userAgent.toUpperCase(); var isOpera = browserVersi ...
- jQuery File Upload 文件上传插件使用一 (最小安装 基本版)
jQuery File Upload 是一款非常强大的文件上传处理插件,支持多文件上传,拖拽上传,进度条,文件验证及图片音视频预览,跨域上传等等. 可以说你能想到的功能它都有.你没想到的功能它也有.. ...
- 关于iOS和Android的安装包更新笔记
关于iOS和Android的安装包更新问题 1. Android更新apk 1)使用DownloadManager下载 2)使用HttpClient下载 apk的下载不能使用ssl,即不能使用http ...
- 机器学习的5种“兵法"
大数据文摘作品,欢迎个人转发朋友圈,自媒体.媒体.机构转载务必申请授权,后台留言“机构名称+转载”,申请过授权的不必再次申请,只要按约定转载即可. 作者:Jason Brownlee 译者:Clair ...
- windows安装logstash-input-jdbc并使用其导入MMSQL数据
1.安装logstash 2.修改logstash 文件夹下Gemfile文件 将source改为:https://gems.ruby-china.org 3.进入bin目录 执行logstash-p ...
- 对网页进行截图(selenium)
import os def insert_img(driver,file_name): #获取当前路径,并转换为字符串 base_dir=str(os.path.dirname(__file__)) ...
- 【CentOS】下安装RabbitMQ教程
系统版本: 安装依赖: 由于RabbitMQ依赖Erlang, 所以需要先安装Erlang. Erlang的安装方式大概有两种: (1) Erlang Solution安装(推荐) wget http ...