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的更多相关文章

  1. CH#24C 逃不掉的路 和 HDU3686 Traffic Real Time Query System

    逃不掉的路 CH Round #24 - 三体杯 Round #1 题目描述 现代社会,路是必不可少的.任意两个城镇都有路相连,而且往往不止一条.但有些路连年被各种XXOO,走着很不爽.按理说条条大路 ...

  2. 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 ...

  3. UVALive-4839 HDU-3686 Traffic Real Time Query System 题解

    题目大意: 有一张无向连通图,问从一条边走到另一条边必定要经过的点有几个. 思路: 先用tarjan将双连通分量都并起来,剩下的再将割点独立出来,建成一棵树,之后记录每个点到根有几个割点,再用RMQ求 ...

  4. HDU 3686 Traffic Real Time Query System (图论)

    HDU 3686 Traffic Real Time Query System 题目大意 给一个N个点M条边的无向图,然后有Q个询问X,Y,问第X边到第Y边必需要经过的点有多少个. solution ...

  5. 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 ...

  6. 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 ...

  7. Traffic Real Time Query System 圆方树+LCA

    题目描述 City C is really a nightmare of all drivers for its traffic jams. To solve the traffic problem, ...

  8. HDU Traffic Real Time Query System

    题目大意是:对于(n, m)的图,给定边a, b查询从a到b要经过的割点的最少数目. 先tarjan算法求双连通然后缩点,即对于每个割点将周围的每个双连通看成一个点与之相连.然后求解LCA即可,距离d ...

  9. Traffic Real Time Query System HDU - 3686

    https://vjudge.net/problem/HDU-3686 点双啊,就是在求割顶的时候,另外用一个栈来存一些边 在遍历u点出发的边时,遇到树边或反向边(u,v)就把此边加入栈(可能要记一下 ...

随机推荐

  1. win10安装MySQL5.7.31 zip版

    因为我之前卸载了安装的(msi,exe)格式的MySQL,现在重新安装zip版的MySQL. 1,下载MySQL MySQL下载地址 : https://dev.mysql.com/downloads ...

  2. 学习一下 Spring Security

    一.Spring Security 1.什么是 Spring Security? (1)基本认识 Spring Security 是基于 Spring 框架,用于解决 Web 应用安全性的 一种方案, ...

  3. JS中 `=+` 是什么?

    JS中 =+ 是什么? 依然是赋值 =是赋值,+代表后面的数字为正数,同理=-代表后面的数字为负数 用处 相当于告诉编译器,即将赋值的数值类型为数字类型,不要把数字当作字符串去拼接 示例 functi ...

  4. rinetd小工具

    一.介绍 tcp端口转发工具,针对ip:port的 连接进行转发.重点开源,且配置简单.不支持ftp,因为ftp要使用多个端口. 1.转发规则 [root@master tmp]# cat a.con ...

  5. [web安全原理]PHP命令执行漏洞基础

    前言 PHP命令执行漏洞 应用程序的某些功能功能需要调用可以执行系统命令的函数,如果这些函数或者函数的参数被用户控制,就有可能通过命令连接符将恶意命令拼接到正常的函数中,从而随意执行系统命令,这就是命 ...

  6. Springboot整合163邮箱部署项目时发送不了邮件的解决方案

    部署到腾讯云服务器时项目报错 Caused by: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: sm ...

  7. Java蓝桥杯01——第一题集锦:堆煤球、购物单、哪天返回、第几天、分数

    堆煤球(2016JavaB) 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100 ...

  8. Java基础教程——垃圾回收机制

    垃圾回收机制 Garbage Collection,GC 垃圾回收是Java的重要功能之一. |--堆内存:垃圾回收机制只回收堆内存中对象,不回收数据库连接.IO等物理资源. |--失去使用价值,即为 ...

  9. High-Resolution Image Inpainting using Multi-Scale Neural Patch Synthesis

    论文来源:CVPR 2017 摘要 之前方法的缺点:之前的方法是基于语义和上下文信息的,在填充较大holes的表现得很好,能够捕获更高级的图像特征,但是由于内存限制和难以训练网络的因素,只能处理分辨率 ...

  10. Python学习第四天----模块儿导入

    1.命名空间 模块儿的名字加上文件的名字,就是命名空间. python如何区分一个普通的文件夹和一个包的? 在一个文件夹下有一个特定的文件__init__.py,此时这个文件夹就是一个包.(前后各两个 ...