[ZJOI2004]嗅探器 (割点)】的更多相关文章

这题就比较好玩吧水题 以数据范围来看随便怎么做就能过 \(O(n)\)显然我们得过一个割点,其次这个割点得在\(x-y\)中间且不为始终点 其他都好说,在中间:从\(x\)开始遍历,首先得保证\(x-y\)不是同一个点双,然后求中间的割点就好了\(dfn[v]≤dfn[y]\), #include<bits/stdc++.h> using namespace std; typedef int LL; const LL maxn=1e6+9,inf=0x3f3f3f3f; struct node…
$Luogu5058 [ZJOI2004]嗅探器 给定一张 \(n\) 个点, \(m\) 条边的无向图,和两点 \(s,\ t\) ,求 \(s\to t\) 编号最小的必经点(排除 \(s,\ t\) ) \(n\leq100\) tarjan 这题数据范围是可以 \(O(n^3)\) 暴力过的-- 显然只需缩点后的树上 \(bl_s\) 到 \(bl_t\) 上找答案,统计割点贡献即可 然而此题有更简单的做法-- 从 \(s\) 开始 tarjan,点 \(u\) 对答案有贡献当且仅当满足…
数据范围过小怎么做都行.考虑优秀一点的做法.考虑dfs树上两台中心服务器间的路径,路径上所有能割掉中心服务器所在子树的点均可以成为答案.直接从两点中的任意一点开始dfs就更方便了.一开始弱智的以为只要是路径上的割点都能作为答案,wa了无数发.当然建棵圆方树也完全没问题. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #…
这个题是tarjan裸题.最后bfs暴力找联通块就行.(一开始完全写错了竟然得了70分,题意都理解反了...这数据强度...) 题干: 题目描述 某军搞信息对抗实战演习,红军成功地侵入了蓝军的内部网络,蓝军共有两个信息中心,红军计划在某台中间服务器上安装一个嗅探器,从而能够侦听到两个信息中心互相交换的所有信息,但是蓝军的网络相当的庞大,数据包从一个信息中心传到另一个信息中心可以不止有一条通路.现在需要你尽快地解决这个问题,应该把嗅探器安装在哪个中间服务器上才能保证所有的数据包都能被捕获? 输入输…
题目概要: 在无向图中寻找出所有的满足下面条件的点:割掉这个点之后,能够使得一开始给定的两个点a和b不连通,割掉的点不能是a或者b.(ZJOI2004) 数据范围约定结点个数N≤100边数M≤N*(N-1)/2 朴素算法: 枚举每个点,删除它,然后判断a和b是否连通,时间复杂度O(NM)如果数据范围扩大,该算法就失败了! AC算法: 题目要求的点一定是图中的割点,但是图中的割点不一定题目要求的点.如上图中的蓝色点,它虽然是图中的割点,但是割掉它之后却不能使a和b不连通由于a点肯定不是我们所求的点…
题目连接 [洛谷传送门] [LOJ传送门] 题目描述 某军搞信息对抗实战演习,红军成功地侵入了蓝军的内部网络,蓝军共有两个信息中心,红军计划在某台中间服务器上安装一个嗅探器,从而能够侦听到两个信息中心互相交换的所有信息,但是蓝军的网络相当的庞大,数据包从一个信息中心传到另一个信息中心可以不止有一条通路.现在需要你尽快地解决这个问题,应该把嗅探器安装在哪个中间服务器上才能保证所有的数据包都能被捕获? 题解 题目给我们的第一感觉就是,这个点一定是割点. 终点(y)的dfn应该大于等于v点的dfn,因…
题目描述 某军搞信息对抗实战演习,红军成功地侵入了蓝军的内部网络,蓝军共有两个信息中心,红军计划在某台中间服务器上安装一个嗅探器,从而能够侦听到两个信息中心互相交换的所有信息,但是蓝军的网络相当的庞大,数据包从一个信息中心传到另一个信息中心可以不止有一条通路.现在需要你尽快地解决这个问题,应该把嗅探器安装在哪个中间服务器上才能保证所有的数据包都能被捕获? 输入输出格式 输入格式: 输入文件的第一行一个整数 \(n\),表示蓝军网络中服务器的数目. 接下来若干行是对蓝军网络的拓扑结构描述,每行是两…
题目描述 某军搞信息对抗实战演习,红军成功地侵入了蓝军的内部网络,蓝军共有两个信息中心,红军计划在某台中间服务器上安装一个嗅探器,从而能够侦听到两个信息中心互相交换的所有信息,但是蓝军的网络相当的庞大,数据包从一个信息中心传到另一个信息中心可以不止有一条通路.现在需要你尽快地解决这个问题,应该把嗅探器安装在哪个中间服务器上才能保证所有的数据包都能被捕获? 输入格式 输入文件的第一行一个整数 n,表示蓝军网络中服务器的数目. 接下来若干行是对蓝军网络的拓扑结构描述,每行是两个整数 i , j 表示…
Tarjan求强连通分量 先来一波定义 强连通:有向图中A点可以到达B点,B点可以到达A点,则称为强连通 强连通分量:有向图的一个子图中,任意两个点可以相互到达,则称当前子图为图的强连通分量 强连通图: 如果在一个有向图中,每两个点都强连通,我们就叫这个图叫强连通图. (一张十分简洁的图) 如图,图中{1,2}就是一个强连通,也是这个图中的一个强连通分量 求强连通分量的算法有三种: Kosaraju算法,Tarjan算法,Gabow算法(然而我只会用Tarjan求) 这里就稍微介绍一下tarja…
主要讲证明,流程倒是也有 然后发现自己并不会严谨证明 其实后面一些部分流程还是挺详细 本来这篇blog叫做"图论部分算法证明",然后发现OI中的图论想完全用数学上的方法证明完全超出我能力范围 而且只写了一个 tarjan 相关的内容长度就爆了,所以别的算法就令开blog吧 各个用途的模板代码可能细节上稍有不同(比如无向图中节点与父亲的连边到底算不算的回边),也可能是我理解没有透彻,所以学的时候看的什么样的代码就写的什么样的 也无所谓,个人感觉我的这些写法在实现和理解上还是比较方便的 懒…