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)就把此边加入栈(可能要记一下 ...
随机推荐
- MTK官方SDK包编译openwrt
全过程需要联网,最好有梯子,编译方式有两种 安装依赖库: apt-get install g++ apt-get install libncurses5-dev apt-get install zli ...
- jdk1.7中hashmap扩容时不会产生死循环
在扩容时 transfer( ) 方法中 newTable 新数组 局部变量 table 旧数组 全局变量 当第一个链表进行while循环时 执行到 e.next = newTable[i]; 时 n ...
- Javaweb项目页面实时显示后台处理结果
http://www.cnblogs.com/dong-xu/p/6701271.html 此博文甚好,项目参照博主代码可实现. 前端页面: <%@ page language="ja ...
- laydate 使用
官网 http://www.layui.com/doc/modules/laydate.html 参考 http://www.cnblogs.com/fengpingfan/p/4660273.htm ...
- PHP 使用gd库给图片加图片水印,文字水印,并返回路径
//图片水印 $mark_filename = './02.jpg'; //获取图片信息 $info = getimagesize($mark_filename); //获取图片的后缀 $type = ...
- js 进度条效果
<!DOCTYPE html><html><head><meta charset="utf-8"><title>< ...
- 阿里云的nginx的https配置问题
server { listen 443 ssl; server_name www.xxx域名.com; root html; index index.html index.html; ssl_cert ...
- vue中使用transition和animate.css动画效果
一.单个动画中,使用div中引用animate动画 1.下载依赖 npm install animate.css –save 2.main.js中全局引用 import animate from 'a ...
- 「CSP-S 2019」格雷码
[题目描述] 传送门 [题解] 题目中已经清楚地告诉你怎么用n位格雷码推n+1位格雷码, 直接二叉树模拟即可 注意要使用unsigned long long(如果这道题没有95分部分分,不知道有多少人 ...
- ②SpringCloud 实战:引入Feign组件,完善服务间调用
这是SpringCloud实战系列中第二篇文章,了解前面第一篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 简介 Feign 是一个声明式的 RE ...