当前位置: 首页 > news >正文

【图论】拓扑排序

一.定义

 拓扑排序是一种对有向无环图(DAG)进行排序的算法,使得图中的每个顶点在排序中都位于其依赖的顶点之后。它通常用于表示一些任务之间的依赖关系,例如在一个项目中,某些任务必须在其他任务之前完成。

拓扑排序的步骤如下:

  1. 找到入度为0的顶点:入度是指指向某个顶点的边的数量。首先,找到图中入度为0的顶点,它们是没有依赖关系的顶点,可以作为排序的起点。

  2. 将入度为0的顶点移出图:选择一个入度为0的顶点,将其从图中移除,并将与之相邻的顶点的入度减1。

  3. 重复步骤1和步骤2:重复上述步骤,直到所有顶点都被移除。如果图是有向无环图,那么拓扑排序会成功完成。

拓扑排序并不是对所有图都适用,只有在有向无环图中才有意义,因为循环依赖会导致拓扑排序无法进行。

 


二.例题

B3644 【模板】拓扑排序 / 家谱树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

三.思路

找出入度为0的点,即为最小辈分的,输出即可,然后取消它的所有连边。

eg:

 可知2无入度,说明2的辈分最小,输出并删除它的连边,print(2)

 

这时4无入度,print(2,4)

 一直重复,print(2,4,5,3,1)


四.参考代码

#include<bits/stdc++.h>
using namespace std;
vector<int>to[101]; 
int in[101];
queue<int>q;
int main(){int n;scanf("%d",&n);for(int i=1;i<=n;i++){int x;while(scanf("%d",&x) && x!=0){to[i].push_back(x);in[x]++;}}for(int i=1;i<=n;i++){if(!in[i]) q.push(i);}while(!q.empty()){int x=q.front();q.pop();cout<<x<<" ";for(int i=0;i<to[x].size();i++){int y=to[x][i];in[y]--;if(!in[y]) q.push(y);}}return 0;
}

五.拓扑+dp

P1807 最长路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)


六.思路

不就是最长路吗?Dijkstra直接秒杀。

但还有什么更快的算法吗?

注意:这是有向无环图(DAG),是不是拓扑排序更快呢?拓扑排序就可以找到图的所有直径,然后DP即可。最后输出dp[n];

状态转移方程为:dp[v]=max(dp[v],dp[u]+w);

若dp[n]<0,那就说明没有边可以到达n点


七.参考代码

#include<bits/stdc++.h>
#define maxn 1505
using namespace std;
int n,m;
vector<int> to[maxn],wt[maxn]; 
int in[maxn],dp[maxn];
queue<int> q;
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);to[u].push_back(v);wt[u].push_back(w);in[v]++; }for(int i=1;i<=n;i++){dp[i]=-1e9;if(in[i]==0) q.push(i) ;}dp[1]=0;while(!q.empty()){int x=q.front(); q.pop();for(int i=0;i<to[x].size();i++){int y=to[x][i],w=wt[x][i];dp[y]=max(dp[y],dp[x]+w);in[y]--;if(!in[y]) q.push(y);}}if(dp[n]<0) cout<<-1;else cout<<dp[n];return 0;
}

相关文章:

【图论】拓扑排序

一.定义 拓扑排序是一种对有向无环图&#xff08;DAG&#xff09;进行排序的算法&#xff0c;使得图中的每个顶点在排序中都位于其依赖的顶点之后。它通常用于表示一些任务之间的依赖关系&#xff0c;例如在一个项目中&#xff0c;某些任务必须在其他任务之前完成。 拓扑排序的…...

自动化备份方案

背景说明 网上有很多教程&#xff0c;写的都是从零搭建一个什么什么&#xff0c;基本上都是从无到有的教程&#xff0c;但是&#xff0c;很少有文章提及搭建好之后如何备份&#xff0c;这次通过请教GitHub Copilot Chat&#xff0c;生成几个备份脚本&#xff0c;以备后用。 注…...

win11出现安全中心空白和IT管理员已限制对此应用的某些区域的访问

问题 windows安全中心服务被禁用 winr 输入services.msc 找到windows安全中心服务查看是否被禁用&#xff0c;改为启动&#xff0c;不可以改动看第三条 打开设置&#xff0c;找到应用—windows安全中心–终止–修复–重置 重启如果还是不行看第四条 家庭版系统需要打开gped…...

github实用指令(实验室打工人入门必备)

​​​​​​​​博主进入实验室啦&#xff0c;作为一只手残党决定在这里分享一些常用的github使用情景和操作指南来解救其他手残党。 内容随着情景增加实时更新。如果只有没几个内容说明场景不多&#xff08;相信对手残党而言是再好不过的消息&#xff09; 情景一&#xff1a…...

6. 激活层

6.1 非线性激活 ① inplace为原地替换&#xff0c;若为True&#xff0c;则变量的值被替换。若为False&#xff0c;则会创建一个新变量&#xff0c;将函数处理后的值赋值给新变量&#xff0c;原始变量的值没有修改。 import torch from torch import nn from torch.nn import …...

AIGC ChatGPT 制作地图可视化分析

地图可视化分析是一种将数据通过地图的形式进行展示的方法,可以让人们更加直观、快速、准确的理解和分析数据。以下是地图可视化分析的一些主要好处: 加强数据理解:地图可视化可以将抽象的数字转化为直观的图形,帮助我们更好地理解复杂的数据集。 揭示地理模式:地理位置是…...

2023-08-24 LeetCode每日一题(统计参与通信的服务器)

2023-08-24每日一题 一、题目编号 1267. 统计参与通信的服务器二、题目链接 点击跳转到题目位置 三、题目描述 这里有一幅服务器分布图&#xff0c;服务器的位置标识在 m * n 的整数矩阵网格 grid 中&#xff0c;1 表示单元格上有服务器&#xff0c;0 表示没有。 如果两台…...

前端实习day35

今天是下早班的一天&#xff0c;下完班直接赶车回广州了&#xff0c;吐槽一下深圳站管理得真得差&#xff0c;候车厅小&#xff0c;人巨多&#xff0c;而且进站口的标识也很少&#xff0c;绕了好久才找到&#xff01;下次再也不去了。 今天是改bug的一天&#xff0c;但是有半天…...

Linux安装jupyter notebook

1. Linux安装jupyter notebook 1.1 生成配置文件 这里在conda环境中安装。 jupyter notebook --generate-config --allow-root上面命令是生成配置文件&#xff0c;并且允许使用root用户运行。配置文件默认生成到~/.jupyter/jupyter_notebook_config.py。 具体解释如下&…...

【猿灰灰赠书活动 - 03期】- 【RHCSA/RHCE 红帽Linux认证学习指南(第7版) EX200 EX300】

说明&#xff1a;博文为大家争取福利&#xff0c;与清华大学出版社合作进行送书活动 图书&#xff1a;《RHCSA/RHCE 红帽Linux认证学习指南(第7版) EX200 & EX300》 一、好书推荐 图书介绍 《RHCSA/RHCE 红帽Linux认证学习指南&#xff08;第7版&#xff09; EX200 & E…...

当 Tubi 遇到 Ruby

有人说 Tubi 作为 RubyConf China 金牌赞助商&#xff0c;明明用极具吸引力的 Elixir 后端工程师岗位和高品质的 Elixir Meetup&#xff0c;“拐走了”一批又一批 Rubyist 投身于 Elixir 开发中&#xff0c;却依然让人想在 Tubi 展台前多停留一会儿。 为什么工程师、校友甚至 …...

【C++从0到王者】第二十四站:多态的底层原理

文章目录 前言一、虚函数表二、一道经典的例题三、深度剖析多态的条件之一&#xff1a;为什么必须是父类的指针或引用四、深度剖析多态的条件之二&#xff1a;为什么是虚函数的重写/覆盖&#xff1f;五、虚函数表的一些总结六、关于Func3的验证七、动态绑定与静态绑定八、总结 …...

Java从入门到精通24==》数据库、SQL基本语句、DDL语句

Java从入门到精通24》数据库、SQL基本语句、DDL语句 2023.8.27 文章目录 <center>Java从入门到精通24》数据库、SQL基本语句、DDL语句一、什么是数据库二、数据库的优缺点1、使用数据库的优点&#xff1a;2、使用数据库的缺点&#xff1a; 三、MySQL基本语句四、DDL语句 …...

学习ts(十)装饰器

定义 装饰器是一种特殊类型的声明&#xff0c;它能够被附加到类声明&#xff0c;方法&#xff0c;访问符&#xff0c;属性或参数上&#xff0c;是一种在不改变原类和使用继承的情况下&#xff0c;动态的扩展对象功能。 装饰器使用expression形式&#xff0c;其中expression必须…...

如何在 Opera 中启用DNS over HTTPS

DNS over HTTPS&#xff08;基于HTTPS的DNS&#xff09;是一种更安全的浏览方式&#xff0c;但大多数 Web 浏览器默认情况下不启用它。了解如何在 Opera 浏览器中启用该功能。 您可能不知道这一点&#xff0c;但您的网络浏览器并不像您希望的那样私密或安全。您会看到&#xff…...

STM32 F103C8T6学习笔记13:IIC通信—AHT10温湿度传感器模块

今日学习一下这款AHT10 温湿度传感器模块&#xff0c;给我的OLED手环添加上测温湿度的功能。 文章提供源码、测试工程下载、测试效果图。 目录 AHT10温湿度传感器&#xff1a; 特性&#xff1a; 连接方式&#xff1a; 适用场所范围&#xff1a; 程序设计&#xff1a; 设…...

QT基础使用:组件和代码关联(信号和槽)

自动关联 ui文件在设计环境下&#xff0c;能看到的组件可以使用鼠标右键选择“转到槽”就是开始组件和动作关联。 在自动关联这个过程中软件自动动作的部分 需要对前面头文件进行保存&#xff0c;才能使得声明的函数能够使用。为了方便&#xff0c;自动关联时先对所有文件…...

TCP最大连接数问题总结

最大TCP连接数量限制有&#xff1a;可用端口号数量、文件描述符数量、线程、内存、CPU等。每个TCP连接都需要以下资源&#xff0c;如图所示&#xff1a; 1、可用端口号限制 Q&#xff1a;一台主机可以有多少端口号&#xff1f;端口号与TCP连接&#xff1f;是否能修改&#x…...

【Docker】云原生利用Docker确保环境安全、部署的安全性、安全问题的主要表现和新兴技术产生

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 云原生利用Docker确保环境安全、部署的…...

explain各个字段代表的意思

id&#xff1a;联表查询是每个表的读取顺序&#xff0c;数字越大越先被读取。相同就需要通过table字段判断select_type&#xff1a;查询类型或者是其他操作类型&#xff08;PRIMARY、UNION、UNION RESULT等&#xff09;table&#xff1a;正在访问哪个表partitions&#xff1a;匹…...

【已解决】Windows10 pip安装报错:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x98

环境&#xff1a;win10, Python3.9 在Pycharm安装YoloV5的依赖包时出现报错&#xff1a;UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x98 出现 ‘gbk’ codec can’t decode… 的报错一般是因为读取文件出现编码问题导致没法读取文件&#xff0c;因此可以在报错…...

goland 中的调试器 -- Evaluate

今天一个好朋友 找到我&#xff0c;问我关于goland中Evaluate 小计算器的使用方式&#xff0c;说实话&#xff0c;我在此之前也没用过这个东西&#xff0c;然后我就找一些相关文档&#xff0c;但是这类文档少的可怜&#xff0c;所以我就稍微研究一下&#xff0c;找找材料&#…...

你知道公司内部维基到底有哪些功能吗

维基指的是一种协作工作的平台&#xff0c;也就是开源的编辑系统。员工可以在企业维基里面进行存储、共享和协作之类的操作&#xff0c;将企业内部员工的知识共享聚集在一起。今天looklook将会详细讲讲公司内部维基具体到底有哪些功能&#xff0c;供大家参考。 公司内部维基的功…...

netdata监控服务器主机(包括Docker容器)

效果 Docker部署 创建挂载目录 mkdir -p /data/netdata/{netdatacache,netdatalib}docker运行 docker run -d --namenetdata \-p 19999:19999 \-v /data/netdata/netdatalib:/var/lib/netdata \-v /data/netdata/netdatacache:/var/cache/netdata \-v /etc/passwd:/host/etc…...

Mybatis学习|第一个Mybatis程序

1.创建一个数据库以及一个用户表&#xff0c;并插入三条数据用来测试 2.创建一个空的maven项目 在pom.xml中导入本次测试用到的三个依赖&#xff0c;mysql驱动、mybatis依赖、以及单元测试junit依赖 将这个 空的maven项目当成一个父项目&#xff0c;再创建一个空的maven子项目用…...

计算机网络MTU和MSS的区别

在计算机网络中&#xff0c;MTU代表最大传输单元&#xff08;Maximum Transmission Unit&#xff09;&#xff0c;而MSS代表最大分节大小&#xff08;Maximum Segment Size&#xff09;。 1.MTU&#xff08;最大传输单元&#xff09;&#xff1a; MTU是指在网络通信中&#x…...

redis学习笔记 - 进阶部分

文章目录 redis单线程如何处理并发的客户端&#xff0c;以及为何单线程快&#xff1f;redis的发展历程&#xff1a;redis单线程和多线程的体现&#xff1a;redis3.x单线程时代但性能很快的主要原因&#xff1a;redis4.x开始引入多线程&#xff1a;redis6/redis7引入多线程IO&am…...

SE5 - BM1684 人工智能边缘开发板入门指南 -- 模型转换、交叉编译、yolov5、目标追踪

介绍 我们属于SoC模式&#xff0c;即我们在x86主机上基于tpu-nntc和libsophon完成模型的编译量化与程序的交叉编译&#xff0c;部署时将编译好的程序拷贝至SoC平台&#xff08;1684开发板/SE微服务器/SM模组&#xff09;中执行。 注&#xff1a;以下都是在Ubuntu20.04系统上操…...

基于Java+SpringBoot+vue前后端分离英语知识应用网站设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…...

vue使用vue-router报错

报错1. app.js:172 Uncaught TypeError: vue_router__WEBPACK_IMPORTED_MODULE_0__.default is not a constructor at eval (index.js:4:1) at ./src/router/index.js (app.js:108:1) at webpack_require (app.js:169:33) at fn (app.js:442:21) at eval (main.js:7:71) at ./…...

有关网站建设的公众号/软文营销经典案例200字

A. timestampdiff() 传三个参数&#xff0c;第一个时间类型如年&#xff0c;月&#xff0c;日&#xff0c;第二个开始时间&#xff0c;第三个结束时间select test_name, timestampdiff(YEAR,create_time,end_time) y_date from test_table; --计算时间-------------------| tes…...

国外网站平台/新闻发稿推广

最近常听同事提及相关性分析,正巧看到这个google的开源库&#xff0c;并把相关操作与调试结果记录下来。 小说集可以百度《金庸小说全集 14部》全&#xff08;TXT&#xff09;作者&#xff1a;金庸 下载下来。 需要整理好格式&#xff0c;门派和武功名称之间需要有换行符&#…...

php网站建设文献综述/天津seo网站推广

转载自&#xff1a;点击打开链接 这是敏捷开发松结对编程系列的第十篇&#xff08;栏目总目录&#xff09;。 以下是本人自己及各企业所采用的代码审查的最佳实践&#xff0c;有些数据做了归纳&#xff0c;以使其“更佳”。 请特别注意每个实践最后简单总结的价值观。如果想采用…...

Wordpress 页面拼接/电脑系统优化工具

问题描述 我的DB2多分区数据库(DPF)环境&#xff0c;操作系统时间被意外/人工修改了&#xff0c;现在我修改回来之后&#xff0c;发现所有的更新操作都会失败&#xff08;insert&#xff0f;delete&#xff0f;update&#xff0f;import&#xff0f;create&#xff0f;load&…...

笑话网站程序/如何优化搜索关键词

本文详细地为大家展示了如何用Axure&#xff0c;实现商品详情页中的放大镜效果&#xff0c;enjoy~网站上面已经有一些关于放大镜效果的文章&#xff0c;但叙述的不是很详细&#xff0c;像我这样的小白可能看晕&#xff0c;我最近刚好学习到这里&#xff0c;所以且尝试把学到的尽…...

西宁公司官方网站建设/推广普通话手抄报简单漂亮

#注册表操作# -*- coding: utf-8 -*- import win32api import win32con#打开注册表&#xff1a;传主键化值&#xff0c;子键值&#xff0c;操作方法&#xff08;win32con.KEY_ALL_ACCESS、win32con.KEY_READ、win32con. KEY_WRITE&#xff09; #返回句柄 def RegOpen(PKey,SKey…...