HDU3686 Traffic Real Time Query System
P.S.此题无代码,只有口胡,因为作者码炸了。
题目大意
给你一个有 \(n\) 个点, \(m\) 条边的无向图,进行 \(q\) 次询问,每次询问两个点 \(u\) \(v\),输出两个点的之间的路径经过了几个割点。
题解
这是一道模板题,先考虑用 \(Tarjan\) 求出割点的位置,再选择缩点。由于我们要缩的是点双连通分量,所以与强连通分量和边双连通分量有所不同。正解好像是圆方树,但是作者这里使用的是自己口胡的一种方法(一直过不了可能就是因为它,但是找不出错)。

对于这样的一个图,我们不像其他的点双连同分量一样缩点,将割点归于周围的点双连同分量,而是将割点与其相连的边断开,如下图:

每一个点双连同分量最后形成的连同块都是不包括割点的,但是包括连向割点的边,这一步骤我们可以通过 \(DFS\) 完成,还是容易的。
错误代码(思路大概是没问题的,大家可以先看看):
for(int i=1;i<=n;++i)
{
if(!dfn[i])
tarjan(i,i);//找割点
}
for(int i=1;i<=n;++i)
{
if(cut[i])
{
bel[i]=++len;//割点自己作为独立的点
dis[len]=1;//割点对于答案的贡献
}
if(cut[i]||vis[i])
continue;
vis[i]=true;
bel[i]=++len;
dfs1(i,len);//标记加tag,点和边都要
}
for(int i=1;i<=m;++i)//建图
{
if(cut[u[i]]&&cut[v[i]])
{
tag[i]=++len;
add(bel[u[i]],len);
add(len,bel[u[i]]);
add(bel[v[i]],len);
add(len,bel[v[i]]);
fa[find(bel[v[i]])]=len;
fa[find(bel[u[i]])]=len;
fa[len]=len;
continue;
}
int fu=find(bel[u[i]]),fv=find(bel[v[i]]);//用并查集维护联通性
if(fu!=fv)
{
add(bel[u[i]],bel[v[i]]);
add(bel[v[i]],bel[u[i]]);
fa[fu]=fv;
}
}
缩点完成了之后,这幅图就变成了森林(不保证图联通),然后我们可以愉快地用 \(DFS\) 统计任意一点到根的答案,然后跑树上 \(LCA\) ,用容斥原理统计答案。
错误代码如下:
for(int i=1;i<=Q;++i)
{
scanf("%d%d",&x,&y);
printf("%d\n",dis[tag[x]]+dis[tag[y]]-dis[tmp]-dis[to[tmp][0]]);
}
HDU3686 Traffic Real Time Query System的更多相关文章
- CH#24C 逃不掉的路 和 HDU3686 Traffic Real Time Query System
逃不掉的路 CH Round #24 - 三体杯 Round #1 题目描述 现代社会,路是必不可少的.任意两个城镇都有路相连,而且往往不止一条.但有些路连年被各种XXOO,走着很不爽.按理说条条大路 ...
- HDU3686 Traffic Real Time Query System 题解
题目 City C is really a nightmare of all drivers for its traffic jams. To solve the traffic problem, t ...
- UVALive-4839 HDU-3686 Traffic Real Time Query System 题解
题目大意: 有一张无向连通图,问从一条边走到另一条边必定要经过的点有几个. 思路: 先用tarjan将双连通分量都并起来,剩下的再将割点独立出来,建成一棵树,之后记录每个点到根有几个割点,再用RMQ求 ...
- HDU 3686 Traffic Real Time Query System (图论)
HDU 3686 Traffic Real Time Query System 题目大意 给一个N个点M条边的无向图,然后有Q个询问X,Y,问第X边到第Y边必需要经过的点有多少个. solution ...
- HDU 3686 Traffic Real Time Query System(双连通分量缩点+LCA)(2010 Asia Hangzhou Regional Contest)
Problem Description City C is really a nightmare of all drivers for its traffic jams. To solve the t ...
- HDU3686 Traffic Real Time Query【缩点+lca】
题目 City C is really a nightmare of all drivers for its traffic jams. To solve the traffic problem, t ...
- Traffic Real Time Query System 圆方树+LCA
题目描述 City C is really a nightmare of all drivers for its traffic jams. To solve the traffic problem, ...
- HDU Traffic Real Time Query System
题目大意是:对于(n, m)的图,给定边a, b查询从a到b要经过的割点的最少数目. 先tarjan算法求双连通然后缩点,即对于每个割点将周围的每个双连通看成一个点与之相连.然后求解LCA即可,距离d ...
- Traffic Real Time Query System HDU - 3686
https://vjudge.net/problem/HDU-3686 点双啊,就是在求割顶的时候,另外用一个栈来存一些边 在遍历u点出发的边时,遇到树边或反向边(u,v)就把此边加入栈(可能要记一下 ...
随机推荐
- ubuntu配置简单的DNS服务器
之所以说是简单的服务器,实现的功能很简单,通过这个dns server 查询制定域名的时候,能够根据设置的值来返回IP,当前的需求是需要轮询的返回IP DNS 轮询机制会受到多方面的影响,如:A记录的 ...
- iczer的vue-antd-admin项目,逐步平滑迁移mock的url
这个需求,在实战中蛮有用的.但没有看到网上太多文档,就自己hack了一个思路.供指正. 需求 在前后端分离的项目开发中,前后端的开发步骤和进度是不一致的.有时,前端为了不等待后端的API开发进度,会自 ...
- VulnHub靶场学习_HA:Forensics
HA:Forensics Vulnhub靶场 下载地址:https://www.vulnhub.com/entry/ha-forensics,570/ 背景: HA: Forensics is an ...
- 精益求精!Spring Boot 知识点全面回顾,带你重新细读源码!
约定优于配置 Build Anything with Spring Boot:Spring Boot is the starting point for building all Spring-bas ...
- 如何用Prometheus监控十万container的Kubernetes集群
概述 不久前,我们在文章<如何扩展单个Prometheus实现近万Kubernetes集群监控?>中详细介绍了TKE团队大规模Kubernetes联邦监控系统Kvass的演进过程,其中介绍 ...
- Wine和CrossOver之间的关系简单介绍
相信有些小伙伴们不太了解Wine和CrossOver之间的关系与区别,然而对此又很好奇,所以小编今天将给大家介绍一下这两者之间的关系与区别. Wine是什么? Windows.Linux和macOS是 ...
- api-hook,更轻量的接口测试工具
前言 在网站的开发过程中,接口联调和测试是至关重要的一环,其直接影响产品的核心价值,而目前也有许多技术方案和工具加持,让我们的开发测试工作更加便捷.接口作为数据传输的重要载体,数据格式和内容具有多样性 ...
- 使用celery异步发送短信
目录 1.使用celery异步发送短信 1.1在celery_task/mian.py中添加发送短信函数 1.2在verifcations/views.py中添加celery发送短信视图函数 1.3 ...
- 精尽MyBatis源码分析 - Spring-Boot-Starter 源码分析
该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...
- redis 客户端
输入缓冲区: 客户端状态的输入缓冲区用于保存客户端发送的命令请求: typedef struct redisClient{ //... sds querybuf; //... }redisClient ...