逃不掉的路

news/2025/2/2 20:42:17/文章来源:https://www.cnblogs.com/watersail/p/18697072
  • 无向图的必经边问题
  • 求无向图的边双连通分量,由于涉及到对边的标记,因此需要采用链式前向星存图
#include <bits/stdc++.h>
using namespace std;
int n,m,cnt;
vector<int>a[100005],c;
int h[100005],nx[400005],to[400005];
int dfn[100005],low[100005],tot,id[100005];
int d[100005],f[100005][20];
bool cut[400005];
void tarjan(int n1,int fa)
{dfn[n1]=low[n1]=++tot;for(int i=h[n1];i;i=nx[i]){int y=to[i];if(!dfn[y]){tarjan(y,n1);low[n1]=min(low[n1],low[y]);if(dfn[n1]<low[y]){cut[i]=cut[i^1]=true;c.push_back(i);}}else if(y!=fa){low[n1]=min(low[n1],dfn[y]);}}
}
void dfs1(int n1)
{for(int i=h[n1];i;i=nx[i]){if(cut[i]==true){continue;}if(!id[to[i]]){id[to[i]]=id[n1];dfs1(to[i]);}}
}
void dfs2(int n1)
{for(int i=0;i<a[n1].size();i++){if(a[n1][i]!=f[n1][0]){f[a[n1][i]][0]=n1;d[a[n1][i]]=d[n1]+1;dfs2(a[n1][i]);}}
}
void add(int u,int v)
{tot++;to[tot]=v;nx[tot]=h[u];h[u]=tot;
}
int lca(int u,int v)
{if(d[u]<d[v]){swap(u,v);}for(int i=16;i>=0;i--){if(d[f[u][i]]>=d[v]){u=f[u][i];}}if(u==v){return u;}for(int i=16;i>=0;i--){if(f[u][i]!=f[v][i]){u=f[u][i];v=f[v][i];}}return f[u][0];
}
void pre()
{for(int j=1;j<=16;j++){for(int i=1;i<=cnt;i++){f[i][j]=f[f[i][j-1]][j-1];}}
}
int dist(int u,int v)
{return d[u]+d[v]-2*d[lca(u,v)];
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);cin>>n>>m;tot=1;for(int i=1;i<=m;i++){int u,v;cin>>u>>v;add(u,v);add(v,u);}tot=0;tarjan(1,0);for(int i=1;i<=n;i++){if(!id[i]){id[i]=++cnt;dfs1(i);}}for(int i=0;i<c.size();i++){a[id[to[c[i]]]].push_back(id[to[c[i]^1]]);a[id[to[c[i]^1]]].push_back(id[to[c[i]]]);}d[1]=1;dfs2(1);pre();int q;cin>>q;for(int i=1;i<=q;i++){int u,v;cin>>u>>v;cout<<dist(id[u],id[v])<<"\n";}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/878095.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ollama mac使用

教程地址:https://www.youtube.com/watch?v=SRroLOci0CA 安装完成后,常用命令。 启动服务:ollama run deepseek-r1:8B 使用:停止服务:本文来自博客园,作者:NeverLateThanBetter,转载请注明原文链接:https://www.cnblogs.com/do-it-520/p/18697037韶华易逝,不能虚度年…

07. 文件操作

一、文件的查找我们可以使用 find 命令 从指定目录向下递归地遍历其各个子目录,将满足的文件显示在终端中。 find [搜索范围] [选项]其中,选项的可选值如下:-name 文件名:按照指定的文件名查找文件,如果不知道文件的全名,可以使用 * 进行模糊匹配。 -user 用户名:查找属…

《计算机网络》笔记——第五章 运输层

计算机网络(第7版)谢希仁目录第5章 运输层概述运输层的两个主要协议端口用户数据报协议UDPUDP的首部格式传输控制协议TCPTCP的连接可靠传输的工作原理停止等待协议连续ARQ协议TCP报文段的首部格式TCP可靠传输的实现滑动窗口超时重传时间(RTO)的选择选择确认SACKTCP的流量控制…

[Paper Reading] DeepSeek-V3 Technical Report

目录DeepSeek-V3 Technical Report解读TL;DR优势训练数据参数量Method架构MLA(Multi-Head Latent Attention)DeepSeekMoEMoEDeepSeekMoEMTP(Multi-Token Prediction)基建FP8训练部署PrefillingDecodingPre-TrainingDataLong Context ExtensionPost-TrainingSFTReinforcement Le…

表单标签3

如何点击用户名来唤醒对应光标 中for id 两者的对象一致

省选模拟4

省选模拟4 A 小丑做法,设 \(f_{S,i,j}\) 为使用边权 \(\le j\) 的边连通了集合 \(S\),里面使用了 \(i\) 个 \(a\) 的最小生成树。 转移朴素枚举,复杂度 \(O(3^nm^3)\) B 是原题。 注意到一个点走过一轮后,从父亲离开后下一次访问会完全访问。 因此可以 dfs 求得一个节点会在…

闲话 25.2.2

the Kernel Method: a collection of examples 读后感闲话 我怎么感觉我读了这个论文,还不知道 kernel method 是啥啊。 没人总结这个,可能未来要读一些新东西。 推歌:时间的彼端 by 暗猫の祝福 et al. the Kernel Method: a collection of examples 读后感 \(1.\) 第一次出…

表单标签

表单就是数据采集,QQ登录页面类似 定义表单 action:规定提交列表式向何处发送表单数据 method:规定用于发送表单数据方式 action="#"时将表单数据提交到当前的html页面

CTFShow-Web160:利用日志包含漏洞进行文件上传

CTFShow-Web160:利用日志包含漏洞进行文件上传 过滤规则 该题对上传文件内容的过滤规则如下: ​ • 禁止包含 空格 ​ • 禁止包含 反引号 (``) ​ • 禁止包含 log 由于反引号被过滤,无法使用 Web159 的方法,需要利用 日志包含漏洞 来实现绕过。 日志包含漏洞原理 日志包含…

关于在使用VSCode编译C++文件时,显示c++11以上的函数或者方法报错,但是能编译通过的可能解决办法之一

在此之前:已经下载好mingw64,并且将bin目录配置到系统变量当中。第一步,在对应文件当中按住Ctrl + Shift + p,再输入c++,显示出如下内容:点击编辑配置 如果你以前下载过VS,那么这里可能默认为CL.exe(推测:这就是我为什么会出现这个错误的原因),将其改为对应目录下g+…

ADALM-Pluto修改IP地址

在 GNURadio 中使用 ADALM-Pluto 模块是以 IP 地址为基础进行通信的,而固定的 IP 地址 192168.2.1 导致一台电脑无法使用多个 Pluto,因此应该进行更改。在 GNURadio 中使用 ADALM-Pluto 模块是以 IP 地址为基础进行通信的,而固定的 IP 地址 192168.2.1 导致一台电脑无法使用…