【DAG】寻找桥边、必经点(支配树)

BZOJ 2815 浅谈有向图必经点问题总结+拓扑序+倍增LCA灭绝树求法 世界真的很大 昨天算是感觉到了真的有人这么无聊 就是有这种人,也管不得了,还是收起心情才是 必经点问题在考试中也算是出现过好几次了,之前都用了其他的蜜汁方法水过去,昨天终究还是用了什么灭绝树 感觉还是要总结一下必经点这么一个东西了 当然听说支配树是可以完全搞定所有问题的,不过常数较大罢了,这个就不讨论了看题先:description: http://www.lydsy.com/Judg 阅读详情

在许多题目中,常常都需要一下操作:给出S、T,找一个桥边(或必经点)

Solution1

先从S走到T,记录下路径(包括点和边),并且标记一下,
再从S开始走,不过这回不走上面标记过的边(不是点),
走完以后,所有访问过的点会与上面标记的路径上的点有部分重合,
我们发现,重合的点中,最右边的(也就是路径中靠后的)设为X,那么,S~X这条路径上的边都不是桥边,反而,在标记的路径上,X的出边一定是桥边,
那么,这样就求出了离S最近的桥边,下一个就从X在路径中的下一个点开始做,
这样就可以找出全部桥边了;

Code

void dfsf(int q)
{
    z[q]=TI;D[++D[0]]=q;No[q]=D[0];
    if(q==T){OK=1;return;}
    efo(i,q)if(z[B[i][1]]<TI)
    {
        B[i][3]=1;D1[D[0]]=i;
        dfsf(B[i][1]);
        if(OK)return;
        B[i][3]=1;
    }
    D[0]--;No[q]=0;
}
void dfs(int q,int G,int LM)
{
    z[q]=TI;g[q]=G;
    if(No[NS]<No[q])NS=q;
    efo(i,q)if(B[i][3]<LM&&z[B[i][1]]<TI)dfs(B[i][1],G,LM);
}
int main()
{
    OK=0;D[0]=0;TI++;dfsf(S);
    if(!OK){printf("-1\n");continue;}
    TI++;D[0]=1;
    for(q=S;q!=T;D[++D[0]]=q=B[D1[No[NS]]][1],D1[D[0]-1]=D1[No[NS]])
    {
        NS=0;
        dfs(q,q,1);
        if(NS==T)break;
    }
}

Solution2

先按拓扑排序排序所有点,
统计出S到T的方案数,
有结论:如果这条边是桥边,那么这条边两边的点x、y也是必经点,而且S到x的方案数*y到T的方案数=S到T的方案数,这个是充分必要的。
必经点同理;

Solution3

这里用到了支配树,且只能用来求必经点,不能求桥边;
支配树:每个点在树上表示从S出发到它,离它最近的必经点,
支配树在DAG上很好做,先排拓扑序,
那么,点x在支配树上的父亲就是所有能走到它的点在支配树上的LCA(这个感性理解),
这样就可以在O(nlog(n))的时间里求解,而且还是多个点的;

算法实验五:图论——桥,从零开始带你读懂各种找桥算法思路(基准法,并查集法,并查集+LCA环边法) 算法实验的全过程记录,只为提供最清晰的算法思路解析 阅读详情

相关推荐

支配树 与 tarjan算法

简介什么是支配树?支配树是什么?XD 对于一张有向图(可以有环)我们规定一个起点r(为什么是r呢?因为网上都是这么规定的),从r点到图上另一个点w可能存在很多条路径(下面将r到w简写为r->w)。 如果对于r->w的任意一条路径中都存在一个点p,那么我们称点p为w的支配点(当然这也是r->w的必经点),注意r点不讨论支配点。下面用idom[u]表示离点u最近的支配点。 对于原图上除r外每一个点

我数学不好 1万+

有向图的必经点,支配树

支配树的背景 流程图 食物链 GC 场景 DAG 上求支配树 树上倍增 模板: P2597 灾难 一般有向图上求支配树 Lengauer-Tarjan 算法 模板: P5180 【模板】支配树 $0 背景 问题 给定有向图,起点 S,终点 T。若从 S 到 T 的每条路径都要经过某个点 u,则 u 是有向图从 S 到 T 的必经点:所有 S 到 T 的路径中点的交集。 若从 S 到 T 的每条路径都要经过某条边 e=uve=uve=uv,则 e 是有向图从 S 到 T 的必经边(桥).

计算机、人工智能、算法和数学 2676

从零构建工业级SPI-CAN网关:CH347与CH9431的软硬件协同设计实战

本文详细介绍了基于CH347和CH9431芯片构建工业级SPI-CAN网关的完整方案。通过硬件架构设计、Linux驱动定制、并发处理优化和EMC抗干扰测试,实现高可靠性通信网关,适用于工业自动化和汽车电子等严苛环境。

spark7igniter的博客 632

codeforces 1214D (DAG必经点与必经边)

#include <bits/stdc++.h> using namespace std; typedef long long LL; const LL mod1 = 998244353; const LL mod2 = 1004535809; const LL mod3 = 1000000009; const int N = 1000005; const int maxn = 10...

ehdhg13455的博客 398

【数字人实战】Windows系统下Fun-CosyVoice3-0.5B-2512本地部署的避坑指南与疑难解析

本文详细介绍了在Windows系统下本地部署Fun-CosyVoice3-0.5B-2512的避坑指南与疑难解析,包括Python环境准备、源码获取、依赖安装、模型下载与WebUI启动等关键步骤。特别针对Windows环境下的常见问题提供了实用解决方案,帮助开发者高效完成部署并充分利用其语音转换与多语言支持功能。

weixin_42521856的博客 375

CANoe数据回放实战:如何用Replay Block精准复现实车故障(附ECU数据处理技巧)

本文深入探讨了利用CANoe的Replay Block功能进行数据回放,以精准复现实车偶发性故障的实战方法。文章重点解析了从原始OBD日志中移除目标ECU数据、转换报文方向等核心数据处理技巧,旨在帮助工程师重构真实的网络测试环境,从而高效定位并解决复杂的ECU问题。

nnn11的博客 495

【学习笔记】DAG / 一般有向图的支配树 / 灭绝树

我恨去年四月没有好好淦!

1127

告别手动复制粘贴!用Python脚本+pywinauto实现PC微信消息自动发送(附完整源码)

本文详细介绍了如何利用Python和pywinauto实现PC微信消息的自动化发送,告别繁琐的手动操作。从环境搭建、UI控件定位到构建健壮的发送流程,再到高级功能扩展和项目打包部署,全面解析了自动化办公的实现方案,显著提升工作效率。

weixin_30315723的博客 583

学习记录-DAG上的支配树

基本概念 作用: 在有向图中,当询问从起点到终点的路径必须经过的点,即去掉这个点以及周围的边,就不能从起点到达终点的点(类似于无向图中的割点)。这时,可与通过建立支配树来解决问题。 结构: 支配树理所当然是一个树状结构。图的起点作为根节点,每一个节点到达根节点的路径都是必经点。如果能建立这样的树状结构,那么基本可以通过搜索求得关于必经点的所有信息。 在DAG上的建树方法: 总的来说就是,点x在支配...

98kaiii的博客 1369

数学建模常用模型10 :数据包络(DEA)分析法(投入产出法)

数据包络分析是评价多输入指标和多输出指标的较为有效的方法,将投入与产出进行比较。它的结果包含的意思有: ①θ=1,DEA有效,表示投入与产出比达到最优 ②θ&lt;1,非DEA有效,表示投入与产出比没有达到最优,一般来说,θ越大说明效果越好。 数据包络分析是通过对投入的指标和产出的指标做了一个线性规划,并且进行变换后,然后根据其线性规划的对偶问题(线性规划对偶问题具有经济学意义),求解这个对...

HaLosec_Wei 9万+

【100%通过率】华为od 机试真题 C语言 实现【补种未成活胡杨】

近些年来,我国防沙治沙取得显著成果。某沙漠新种植N棵胡杨(编号1-N),排成一排。一个月后,有M棵胡杨未能成活。现可补种胡杨K棵,请问如何补种(只能补种,不能新种),可以得到最多的连续胡杨树?

MISAYAONE的博客 1653

图论杂项

说明 写这篇文章,只是起一个mark的作用,避免自己以后遗忘出现错漏,或者每次都要现推一遍(其实就是懒) 想到有东西就会来补充,也欢迎读者补充 对于那些学算法的就不要看了233 为了方便理解,本文牺牲严谨,尽量以形象的语言说明 有向图 强联通分量 这个很常用的,打起来也很方便 搜索一个点v的子树 for&amp;#xA0;each(v,u)&amp;#x2208;E'&gt;for ea

LYD729 766

药物对接仿真软件:HADDOCK_(16).实践项目:抗体-抗原对接案例

定义分子结构文件。

kkchenjj的博客 579

2017.10.28 Tarjan求无向图必经点 解题报告

【题目描述】给出一个无向图,求从1号点到n号点的必经点【输入】第一行 一个整数 一个整数 T,表示共 T组数据 。 对于每组数据,第一行两个n,m表示有n个点,m条边。 接下来m行,两个正整数 u,v,表示u和v个建筑物之间相连。 建筑物之间相连。 建筑物之间相连。 建筑物之间相连。【输出】必经点个数和必经点编号【解题报告】一开始以为是支配树什么的,看了题解才发现Tarjan也可以做,不禁感慨自

onepointo 1507

Python在振动信号处理中的应用(一):振动信号消除多项式趋势项

文章目录一、概述二、最小二乘法去除趋势项原理三、python模块介绍3.1 scikitlearn简介(1)转化器(Transformer)(2)估计器(Estimator)3.2 线性回归LinearRegression3.3 多项式PolynomialFeatures3.4 工作流Pipeline四、python代码实现4.1 构造模拟信号4.2 编写去除趋势项主代码4.3 展示算法效果五、TIPS 一、概述   在振动测试过程中,传感器或采集设备由于自身性能问题或受环境干扰(如温度、供电等影响),容易

白银时代的博客 8578

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

洛谷 P2597 [ZJOI2012]灾难(支配树/必经点)

链接:https://www.luogu.org/problem/P2597 题意:给你一个n,代表n种生物。接下来n行,每行给出生物i可以吃的物种,每行以0结束。对于每种生物i,如果它灭绝,求多少物种也会因为没有食物而灭绝。 思路:题目声明是DAG(有向无环图),那么这个题很明显是个简单支配树(关于必经点)的问题。建立一个超级源点0(可以把它当作太阳),如果它没了,那么所有物种都会灭绝,也就...

birdmanqin的博客 333

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

无向图必经点、必经边的相关问题

目录 无向图必经点、必经边的相关问题 一、 任意两点间路径的必经边 二、 任意两点间路径的必经点 三、 任意两边间路径的必经点 四、 任意两边间路径的必经边 五、声明: 无向图必经点、必经边的相关问题 一、 ...

weixin_30448685的博客 1462

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

图论 —— 支配树

【概述】 给定一个有向图与一个起点 S,如果要去掉起点 S 到某个点 p 的中间的某个点 x后无法到达,那么称点 x 支配点 p,x 是 p 的一个支配点。 显然支配点 x 可以有多个,支配点的集合记为 {Xp},对于起点以为的点,它们都有两个平凡的支配点,一个是其自身,一个是起点。 在支配 p 的点中,若一个支配点 i≠p,满足 i 被 p 剩下的所有非平凡的支配点支配,则称 i 为...

Alex_McAvoy的博客 6182

dfs树 找桥边

dfs树上: 一条树边是桥边:当前仅当:没有任意一条回边连接其祖先与其后代节点。 我们用dp[x]表示 多少条回边穿过x - fa[x] 。 自下往上转移dp。 dp[x]=dp[y] + (x-> 其祖先节点 的回边的个数) - ( x的后代节点连接x的回边个数) 最后只要dp[x]等于0,那么x与其父亲节点连接的边,一定是桥边。 #include <bits/stdc++.h> using namespace std; typedef long long ll; ...

bjfu170203101的博客 613

DAG支配树

    对于有向无环图的支配树     按照拓扑排序建树     每个节点在支配树上的父亲     是原图上所有父亲的 LCALCALCA     时间复杂度:O(nlogn)O(nlogn)O(n...

Scar_Halo 468

【模板】支配树,求有向图中两点路线的必经点的个数

题目:http://acm.hdu.edu.cn/showproblem.php?pid=6604 解析:https://blog.youkuaiyun.com/a710128/article/details/49913553 支配数其实就是拓扑排序+LCA+dfs序+带权并查集 目的就是求出有向图从一个点到另一个点必须经过的点的个数 /* 支配树板子 用于求解从u到v有多少个必须经过的点 ...

Q755100802的博客 636

Gym - 101986F Pizza Delivery(最短路+DAG必经边)

题目链接:点击查看 题目大意:给出一个n个点m条边的有向无环图,每条边的权重为w,起点为1,终点为2,现在对每一条边询问: 若将该边的方向取反,权值不变,则对最短路有无影响,分为三种情况讨论: 若最短路变短,输出HAPPY 若最短路不变,输出SOSO 若最短路变短,输出SAD 题目分析:我们可以用迪杰斯特拉,用正向边跑一下起点的最短路,再用反向边跑一下终点的最短路,然后在枚举每条边即可,...

Falcon的博客 1132

bzoj2815(DAG支配树模板)

题目 题面 建立出原图的支配树的图。以一个点为根的子树的大小-1(减去该点)就是该点的伤害值。 模板题 不说啦。 #include<cstdio> #include<iostream> #include<queue> #include<cstring> #define en '\n #define m(a,b) memset(a,b,sizeof a...

qq_42576687的博客 228

洛谷 P2597 [ZJOI2012]灾难 灭绝树(支配树)

题面题意给出一张食物网,问当每种生物分别灭绝后会让其他一共几种生物灭绝(没有食物).做法可以发现生物之间的灭局关系会形成一片森林,我们可以用一个根节点将所有树合并成一棵树,也可以理解为新增一种”生物”–太阳,所有生产者会因为它的灭绝而灭绝. 首先对所有生物进行拓扑排序,然后考虑安拓扑序一个一个节点慢慢加入,在加入第i个节点时,不难发现它的所有食物的lca(生产者视为以太阳为食物)到根的这条链上的任

yzyyylx的博客 558

计算流图中的前必经节点

《现代编译器的Java实现》中的一图,左边是流图,右边是必经节点树 根据必经节点的算法写了程序验证了下。 只是为了验证算法,并没有考虑最优算法,不过因为此流图足够简单,所以只迭代了两次即求出了结果。 代码如下: Node类抽象图中的节点,Dominator类用来计算 1 import java.util.ArrayList; 2 import java.util.List;...

weixin_30352645的博客 575
上一篇: 【JZOJ 5239】 【GDOI2018模拟8.7】图的异或
下一篇: 【JZOJ 5241】【GDOI2018模拟8.8】苹果和雪梨
HOWARLI
博客等级 码龄11年 109粉丝 378原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值