支配树学习笔记

学习链接【学习笔记】支配树_cz_xuyixuan的博客-CSDN博客

主要的求法是最后两个结论:

定理4用来求sdom,先搞一个dfs树,然后将点按dfs序从大到小加入,对每个点维护到当前根(即已加入点)路径上sdom最小是哪个(sdom的比较是对dfs序比)记为home,可以用带权并查集完成。加入一个点,就先枚举所有能直接到达本身的相邻点,用他们的home更新我,然后加入我到dfs树父亲的边。

然后用推论1求idom,写一个倍增求(sdom[x], x]路径上sdom最小的点即可。

模板题 HDU4694 (建立根在n的支配树)

#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define pii pair<int, int>
#define fi first
#define sc second
using namespace std;
const int inf = 1e9;
const int N = 2e6 + 100;
const ll mod = 998244353;void sol(int n, int m) {vector<vector<int>> adj(n + 1), radj(n + 1), tree_adj(n + 1);for (int i = 1; i <= m; i++) {int x, y;cin >> x >> y;adj[x].pb(y);radj[y].pb(x);}int tim = 0;vector<int> rnk(n + 1, 0), dfn(n + 1, 0), tree_fa(n + 1, 0);function<void(int)> dfs = [&](int x) {rnk[x] = ++tim, dfn[tim] = x;for (int y : adj[x]) {if (!rnk[y]) {tree_fa[y] = x;tree_adj[x].pb(y);dfs(y);}}};dfs(n);vector<int> sdom(n + 1, 0), rt(n + 1, 0), home(n + 1, 0);iota(all(sdom), 0);iota(all(rt), 0);iota(all(home), 0);function<int(int)> get_home = [&](int x) {if (rt[x] == x) {return home[x];}int tmp = get_home(rt[x]);if (rnk[sdom[tmp]] < rnk[sdom[home[x]]]) {home[x] = tmp;}rt[x] = rt[rt[x]];return home[x];};for (int i = n; i >= 1; i--) {int x = dfn[i];for (int y : radj[x]) {if (rnk[y] && rnk[sdom[get_home(y)]] < rnk[sdom[x]]) {sdom[x] = sdom[get_home(y)];}}rt[x] = tree_fa[x];}vector<int> dep(n + 1, 0);vector<vector<int>> jp(20, vector<int>(n + 1, 0)), mn(20, vector<int>(n + 1, 0));vector<int> idom(n + 1, 0);vector<ll> sum(n + 1, 0);function<void(int)> dfs_tree = [&](int x) {jp[0][x] = tree_fa[x];mn[0][x] = x;for (int j = 1; j < 20; j++) {jp[j][x] = jp[j - 1][jp[j - 1][x]];if (rnk[sdom[mn[j - 1][jp[j - 1][x]]]] < rnk[sdom[mn[j - 1][x]]]) {mn[j][x] = mn[j - 1][jp[j - 1][x]];} else {mn[j][x] = mn[j - 1][x];}}int dt = dep[x] - dep[sdom[x]];int ps = x, cur = x;for (int j = 19; j >= 0; j--) {if (dt >> j & 1) {if (rnk[sdom[mn[j][cur]]] < rnk[sdom[ps]]) {ps = mn[j][cur];}cur = jp[j][cur];} }if (sdom[ps] == sdom[x]) {idom[x] = sdom[x];} else {idom[x] = idom[ps];}sum[x] = sum[idom[x]] + x;for (int y : tree_adj[x]) {dep[y] = dep[x] + 1;dfs_tree(y);}};dfs_tree(n);for (int i = 1; i <= n; i++) {cout << sum[i] << " \n"[i == n];}
}signed main() {ios::sync_with_stdio(0);cin.tie(0);
//	int tt;
//	cin >> tt;
//	while (tt--)int n, m;while (cin >> n >> m)sol(n, m);
}

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

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

相关文章

CentOS 8上安装和配置Redis

在本篇博客中&#xff0c;我们将演示如何在CentOS 8上安装和配置Redis。我们将首先安装Redis&#xff0c;然后配置Redis以设置密码并允许公开访问。 步骤 1&#xff1a;安装Redis 首先&#xff0c;更新软件包列表&#xff1a; sudo yum update安装Redis&#xff1a; sudo yum …

sky-notes-01

1、DTO类 DTO&#xff08;Data Transfer Object&#xff09;&#xff1a;数据传输对象&#xff0c;Service 或 Manager 向外传输的对象。 详见阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义 当前端提交的数据和实体类中对应的属性差别比较大时&#xff0c;建议使用…

session无法读取问题解决(cookie浏览器权限)

问题 使用go的 "github.com/gin-contrib/sessions"库对session进行设置并获取时&#xff0c;浏览器拒绝掉请求携带cookie&#xff0c;体现在浏览器上为“被过滤掉的session”&#xff0c;并携带小三角提示符。 基本概念 SameSite Chrome 51 开始&#xff0c;浏览…

顺序栈的基本操作(2种实现方式)

0.定义 #define MaxSize 50 typedef struct {Elemtype data[MaxSize];int top; }SqStack;1.初始化 void InitStack(SqStack &S) {S.top -1; }2.判空 bool StackEmpty(SqStack S) {if(S.top -1)return true;elsereturn false; }3.进栈 ①实现一&#xff1a;栈顶指针指…

Ansible最佳实践之Playbook管理滚动更新

写在前面 理解不足小伙伴帮忙指正 傍晚时分&#xff0c;你坐在屋檐下&#xff0c;看着天慢慢地黑下去&#xff0c;心里寂寞而凄凉&#xff0c;感到自己的生命被剥夺了。当时我是个年轻人&#xff0c;但我害怕这样生活下去&#xff0c;衰老下去。在我看来&#xff0c;这是比死亡…

级联选择框

文章目录 实现级联选择框效果图实现前端工具版本添加依赖main.js导入依赖级联选择框样式 后端数据库设计 实现级联选择框 效果图 实现 前端 工具版本 node.js v16.6.0vue3 级联选择框使用 Element-Plus 实现 添加依赖 在 package.json 添加依赖&#xff0c;并 npm i 导入…

Web安全基础

1、HTML基础 什么是 HTML HTML 是用来描述网页的一种语言。 HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言&#xff0c;而是一种标记语言 (Markup language) 标记语言是一套标记标签 (Markup tag) HTML 使用标记标签来描述网页 总的来说&…

Ubuntu中关闭防火墙

在Ubuntu中关闭防火墙可以通过以下步骤进行&#xff1a; 查看防火墙状态&#xff1a; sudo ufw status如果防火墙状态为active&#xff08;活动状态&#xff09;&#xff0c;则执行以下命令来停用防火墙&#xff1a; sudo ufw disable输入以下命令确认是否停用防火墙&#x…

【Rust 基础篇】Rust可变静态变量:全局状态的可变性管理

导言 Rust是一种以安全性和高效性著称的系统级编程语言&#xff0c;其设计哲学是在不损失性能的前提下&#xff0c;保障代码的内存安全和线程安全。为了实现这一目标&#xff0c;Rust引入了"所有权系统"、"借用检查器"等特性&#xff0c;有效地避免了常见…

Flink之Kafka Sink

代码内容 package com.jin.demo;import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.connector.base.DeliveryGuarantee; import org.apache.flink.connector.kafka.sink.KafkaRecordSerializationSchema; import org.apache.fli…

【LeetCode】28. 找出字符串中第一个匹配项的下标

题目&#xff1a; 28. 找出字符串中第一个匹配项的下标 这道题一看就是经典的KMP算法求解字符串模式匹配问题。 但这里我用了java里自带的字符串匹配函数 indexOf(),虽然有点偷懒&#xff0c;但运行结果还不错。主要是怕有时候竞赛会突然忘了一些算法&#xff0c;不过有时候多…

[数据集][目标检测]天牛数据集目标检测数据集VOC格式3050张

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;3050 标注数量(xml文件个数)&#xff1a;3050 标注类别数&#xff1a;1 标注类别名称:["longicorn"] …

Tomcat中利用war包部署

在Tomcat中利用war包部署Web应用程序时&#xff0c;默认情况下&#xff0c;应用程序的上下文路径&#xff08;也称为项目名称&#xff09;将是war文件的名称&#xff08;去除.war扩展名&#xff09;。这意味着您在访问Web应用程序时必须在URL中包含项目名称。例如&#xff0c;如…

Minio在windows环境配置https访问

minio启动后&#xff0c;默认访问方式为http&#xff0c;但是有的时候我们的访问场景必须是https&#xff0c;浏览器有的会默认以https进行访问&#xff0c;这个时候就需要我们进行配置上的调整&#xff0c;将minio从http访问升级到https。而查看minio的官方文档&#xff0c;并…

【Spring Cloud Alibaba】限流--Sentinel

文章目录 概述一、Sentinel 是啥&#xff1f;二、Sentinel 的生态环境三、Sentinel 核心概念3.1、资源3.2、规则 四、Sentinel 限流4.1、单机限流4.1.1、引入依赖4.1.2、定义限流规则4.1.3、定义限流资源4.1.4、运行结果 4.2、控制台限流4.2.1、客户端接入控制台4.2.2、引入依赖…

【Qt】QML-02:QQuickView用法

1、先看demo QtCreator自动生成的工程是使用QQmlApplicationEngine来加载qml文件&#xff0c;下面的demo将使用QQuickView来加载qml文件 #include <QGuiApplication> #include <QtQuick/QQuickView>int main(int argc, char *argv[]) {QGuiApplication app(argc,…

layui各种事件无效(例如表格重载或 分页插件按钮失效)的解决方法

下图是我一个系统的操作日志&#xff0c;在分页插件右下角嵌入了一个导出所有数据的按钮 &#xff0c;代码没有任何问题&#xff0c;点击导出按钮却失效 排查之后&#xff0c;发现表格标签table定义了ID又定义了lay-filter&#xff0c;因我使用的layui从2.7.6升级到2.8.11&…

JavaScript高级——ES6基础入门

目录 前言let 和 const块级作用域模板字符串一.模板字符串是什么二.模板字符串的注意事项三. 模板字符串的应用 箭头函数一.箭头函数是什么二.普通函数与箭头函数的转换三.this指向1. 全局作用域中的 this 指向2. 一般函数&#xff08;非箭头函数&#xff09;中的this指向3.箭头…

SSL 证书过期巡检脚本

哈喽大家好&#xff0c;我是咸鱼 我们知道 SSL 证书是会过期的&#xff0c;一旦过期之后需要重新申请。如果没有及时更换证书的话&#xff0c;就有可能导致网站出问题&#xff0c;给公司业务带来一定的影响 所以说我们要每隔一定时间去检查网站上的 SSL 证书是否过期 如果公…

Flutter - 微信朋友圈、十字滑动效果(微博/抖音个人中心效果)

demo 地址: https://github.com/iotjin/jh_flutter_demo 代码不定时更新&#xff0c;请前往github查看最新代码 前言 一般APP都有类似微博/抖音个人中心的效果&#xff0c;支持上下拉刷新&#xff0c;并且顶部有个图片可以下拉放大&#xff0c;图片底部是几个tab&#xff0c;可…