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)就把此边加入栈(可能要记一下 ...
随机推荐
- HotSpot的启动过程(配视频进行源码分析)
本文将详细介绍HotSpot的启动过程,启动过程涉及到的逻辑比较复杂,细节也比较多,为了让大家更快的了解这部分知识,我录制了对应的视频放到了B站上,大家可以参考. 第4节-HotSpot的启动过程 下 ...
- simple-rpc
RPC的实现原理 正如上一讲所说,RPC主要是为了解决的两个问题: 解决分布式系统中,服务之间的调用问题. 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑. 还是以计算器Calc ...
- 使用@Validated校验数据(除数据库做辅助)
一.controller层 /** * 使用@Validated来进行校验 * @author HuangJingNa * @date 2019年12月23日 下午6:02:20 * * @param ...
- 多MDS变成单MDS的方法
前言 之前有个cepher的环境上是双活MDS的,需要变成MDS,目前最新版本是支持这个操作的 方法 设置最大mds 多活的mds的max_mds会超过1,这里需要先将max_mds设置为1 ceph ...
- 打乱Map key - value的对应顺序
应用场景:对于考试试卷选择题选项的乱序对应问题,防止考生作弊,每个人的题目都是不一样的选项顺序. package com.muyuan.platform.elearning.util; import ...
- MySQL索引背后的数据结构及原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- 用CorelDRAW来制作产品结构图的方法
一.产品结构图的重要性 随着我国经济不断的高速发展,大家的生活水平不断提高,我们将会在生活生产中越来越多的,遇到许多各种各样的生产产品和生活消费品.科技的飞速进步,更是使这些产品.消费品包含了很强的科 ...
- Folx使用教程:怎么通过设置标签分类下载内容
很多Mac OS下载软件从网上下载各种各样的文件,一般默认都会存放在"下载"文件夹中.如果不是经常整理"下载"文件夹,久而久之,该文件夹会变得庞大而杂乱. 如果 ...
- uniapp兄弟组件如何修改数据?一看就废!
1. 如A组件里有个num = 10 并需要在生命周期函数created里通过uniapp提供的uni.$on方法来注册全局事件,并加一个形参.( uni.$on( '自定义事件名') , 形参 =& ...
- lca(lowestCommonAncestor)