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]]);
}

最新文章

  1. 算法与数据结构(十四) 堆排序 (Swift 3.0版)
  2. RDIFramework.NET框架SOA解决方案(集Windows服务、WinForm形式与IIS形式发布)-分布式应用
  3. 解释器模式(Interpreter Pattern)
  4. php设计模式--单例模式
  5. webView(简单的浏览器)
  6. Android 云服务器的搭建和友盟APP自动更新功能的实现
  7. Linux常用命令英文全称与中文解释Linux系统
  8. (五)CSS伪类(Pseudo-class)
  9. Linux 静态库&amp;动态库调用
  10. 解决Eclipse中文乱码的方法
  11. shapeless官方指南翻译写在前面
  12. 关于QT5使用QtScript解析QJsonArray数组的问题
  13. 关于win10系统1709版本安装JDK出现变量配置正确但仍有“java不是内部或外部命令”的解决办法
  14. char和unsigned char--数据类型区别
  15. nginx新增tcp模板
  16. node.js 调试 eggs launch.json配置信息
  17. Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again
  18. libtorch初体验
  19. 关于win10系统配置变量时,javac编译不出的原因:没用好百度!
  20. Centos7 安装MySQL8.0.15

热门文章

  1. 【JVM】肝了一周,吐血整理出这份超硬核的JVM笔记(升级版)!!
  2. 三:redis启动后的基础知识
  3. 关于多线程--网络编程 -- 注解反射的一点笔记(JAVA篇)
  4. HotSpot类模型之InstanceKlass
  5. FL Studio12如何进行图示编辑
  6. 思维导图软件MindManager的视图介绍
  7. Java反射——根据配置文件,实例化对象
  8. 听说高手都用记事本写C语言代码?那你知道怎么编译运行吗?
  9. NameServer 与zk
  10. [BUGCASE]Phantom服务代码不健壮导致无法发送报表邮件