嗅探器(割点)

news/2024/11/16 0:40:10/文章来源:https://www.cnblogs.com/didiao233/p/18306477

https://www.luogu.com.cn/problem/P5058

第2题     嗅探器 查看测评数据信息

某军搞信息对抗实战演习,红军成功地侵入了蓝军的内部网络。蓝军共有两个信息中心,红军计划在某台中间服务器上安装一个嗅探器,从而能够侦听到两个信息中心互相交换的所有信息。

但是蓝军的网络相当的庞大,数据包从一个信息中心传到另一个信息中心可以不止有一条通路。

现在需要你尽快地解决这个问题,应该把嗅探器安装在哪个中间服务器上才能保证所有的数据包都能被捕获?

输入格式

 

输入文件的第一行一个整数 n,表示蓝军网络中服务器的数目。

接下来若干行是对蓝军网络的拓扑结构描述,每行是两个整数i,j表示编号为i和编号为j的两台服务器间存在双向连接。

服务器的编号从1开始,一行两个0表示网络的拓扑结构描述结束,再接下来是两个整数a,b分别表示两个中心服务器的编号。

1≤n≤2×1e5,边数不超过 5×1e5

 

输出格式

 

输出满足条件的服务器编号。如果有多个解输出编号最小的一个,如果找不到任何解,输出 No solution。

 

输入/输出例子1

输入:

5

2 1

2 5

1 4

5 3

2 3

5 1

0 0

4 2

 

输出:

1

 

样例解释

 

 

 

对于判断A,B两点的关系(是否在同一连通块),可从A点dfs,分类讨论B点和U,V二点关系(B在U,V上,在U,V中间,在U,V下,这个位置关系用时间戳判断)

 

割点好题。

 

**题意:**无向连通图中有A、B两点,问是否存在一个点能切断A、B之间的联系。

 那这题就可以分类讨论A,B两点位置,使得A,B两点不在同一个连通块,从而找到割点

为了简化问题,我们直接从 A 点开始做DFS,找另外的B点。

 

 

最容易想到的就是判断b的时间戳(dfn)是否不小于我们找到的割点,如下图

但是这种想法是有缺陷的。

假如a有一条连向b的边,但b却是由u遍历到的,那么这时u就不能分开a与b。

所以我们想到利用判断 u是割点的 v点,并且可以整理一下,分成三类

根据位置关系讨论,B在u点v点上方,B在u点v点之间,B在u点v点之下,这些位置关系可以用时间戳判断。

 

 

对于一个割点 u ,若判定 u 为割点的边是 (u,v),那么有以下讨论,

  • 如果 dfn[b] < dfn[u],则 b 是 u 的祖先或者 b 和 u 不在同一个子树内,由于 a 是根,那么 a 和 b一定在一个连通块内。

  • 如果 dfn[b] > dfn[u] && dfn[b] <dfn[v],则 b 是 v 的兄弟子树中的节点,无法确定 a,b 是否在一个连通块。

  • 如果 dfn[b] >= dfn[v],则 b 是 v 的子树中的节点,a,b 一定不在一个连通块。

 

进而,我们只需要第三种情况即可。

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;int n, u1, v1, x, y, dfn[N], low[N], idx=0, root=0;
bool cut[N];
vector<int> a[N]; 
void dfs(int u, int fa)
{dfn[u]=low[u]=++idx;int child=0;for (int i=0; i<a[u].size(); i++){int v=a[u][i];if (!dfn[v]){child++;dfs(v, u);low[u]=min(low[u], low[v]);if (low[v]>=dfn[u] && u!=root && dfn[y]>=dfn[v]) cut[u]=1;}else low[u]=min(low[u], dfn[v]);}//	if (u==root && child>=2) cut[root]=1;
}
int main()
{scanf("%d", &n);while (scanf("%d%d", &u1, &v1) && u1 && v1){a[u1].push_back(v1);a[v1].push_back(u1);}scanf("%d%d", &x, &y);root=x;dfs(root, 0);for (int i=1; i<=n; i++)if (cut[i]){printf("%d", i);return 0;}printf("No solution");return 0;
}

 

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

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

相关文章

在excel中快速定位到具体的行

1.在这个位置输入A6 到这行2.在这个位置输入A6 到这行 快捷键 Crtl+G 本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。 首发链接:https://www.cnblogs.com/lingyejun/p/18306473作者:翎野君 出处:http://www.cnblogs.com/lingyejun/ 若本文如对您有帮助,不妨…

[天堂之门+模拟执行]2021羊城杯oddcode

天堂之门 学习文章 https://taardisaa.github.io/2021/09/25/HeavensGate/ 前言 Windows判别位的方式,是根据cs段寄存器的。 在32位程序中,cs的值是0x23; 在64位程序中,cs的值是0x33。 所以只要修改cs的值,就能实现切换。而实现这个切换,使用的是ljmp长跳转指令(在Intel语法中也…

全面对比:天工大模型 vs 紫东太初大模型

在当今信息时代,人工智能(AI)技术的飞速发展正以前所未有的速度和深度改变着我们的生活和工作方式。随着大数据、计算能力和算法的不断提升,各类大模型的涌现使得AI的应用领域日益广泛,从自然语言处理到图像识别,从推荐系统到自动驾驶,AI正逐渐渗透到各行各业,成为推动…

读人工智能全传15意向立场

读人工智能全传15意向立场1. 物理立场 1.1. 可以解释一个实体行为 1.2. 在物理立场中,我们使用自然法则(物理、化学等)来预测系统的行为结果 1.3. 虽然物理立场在解释这种行为的时候非常有效,但无法应用于理解或者预测人类行为 1.3.1. …

Microsoft宣布将在开发人员会议上专注于.NET Aspire

2024年7月15日微软宣布,其开发执行团队将在下个月的开发者大会上聚焦于使用 .NET Aspire 的云原生开发,以及结合人工智能的“现代 SQL”在 Microsoft Fabric 中的应用。微软的 Visual Studio LIVE! 2024 大会不仅是一个会议,而是创新、学习和社区庆祝的盛会。大会将于 8 月 …

PDF 分割拆分 API 数据接口

PDF 分割拆分 API 数据接口 文件处理,PDF 高效的 PDF 分割工具,高效处理,可永久存储。1. 产品功能高效处理大文件; 支持多语言字符识别; 支持 formdata 格式 PDF 文件流传参; 支持设置每个 PDF 文件的页数; 输出文件永久 CDN 存储; 全接口支持 HTTPS(TLS v1.0 / v1.1 …

拯救SQL Server数据库事务日志文件损坏的终极大招

拯救SQL Server数据库事务日志文件损坏的终极大招在数据库的日常管理中,我们不可避免的会遇到服务器突然断电(没有进行电源冗余),服务器故障或者 SQL Server 服务突然停掉, 头大的是ldf事务日志文件也损毁了,SQL Server服务器起来之后,发现数据库处于"Recovery Pen…

On July

STAYING IN HOME 7月3日放假回家,这段时间大致是起床挖洞、晚上打球、外卖度日。完全的"宅",计划去练车,不巧的是打球崴脚了,只能闭关一下了。刚回家的那几天全是凌晨四五点睡,这几天好转一些,有意控制早点,不然窗帘一拉,起床就是下午三四点。每次起床就是吃完…

openEuler arm 环境源码编译mysql 8.0.37

部分参考博客 https://blog.csdn.net/ghpanxt/article/details/119387253 1、安装依赖:yum install -y openssl-devel ncurses-devel libaio libaio-devel libtirpc-devel openldap-devel openldap git bison 【注意】:对于openEuler操作系统,还需要安装rpcsvc-proto依赖,具…

Windows安装MySQL8

Windows安装MySQL8 0.下载 社区版最新版:https://dev.mysql.com/downloads/installer/ 各版本:https://downloads.mysql.com/archives/installer/Windows (x86, 32-bit), MSI Installer,迅雷下载 企业版 ... 1. 安装 1). 双击官方下来的安装包文件2). 根据安装提示进行安装安…

全网最适合入门的面向对象编程教程:18 类和对象的 Python 实现-多重继承与 PyQtGraph 串口数据绘制曲线图

本文主要介绍了Python中创建自定义类时如何使用多重继承、菱形继承的概念和易错点,同时讲解了如何使用PyQtGraph库对串口接收的数据进行绘图。全网最适合入门的面向对象编程教程:18 类和对象的 Python 实现-多重继承与 PyQtGraph 串口数据绘制曲线图 摘要: 本文主要介绍了 P…

【笔记】圆方树

【笔记】圆方树 1 定义 仙人掌: 所有边都至多被包含在一个环中。2 构建 给一个点和它所在的所在的所有点双连边,同时,我们定义方点为虚点(即表示点双的点),圆点为原图上的点。 注意,是所有点双,所以一个割点会连向多个点双。同时,由定义得,该图有且仅有圆方边,因为圆…