查错 (拓扑排序+堆维护)

拓扑查错 数据生产中,其中一个核心问题便是数据完成性,ArcGIS中对于数据完整性的检查提供了的工具便是拓扑工具,它不仅可以验证地理数据库,更可以对要素间的空间关系建模。 先来简单介绍一下拓扑的基础知识。首先拓扑是点、线和面的空间位置关系。拓扑在实际生产中最常用的场景便是面要素的重叠,该类问题通常在数据库中或利用地理处理工具来创建拓扑。本文主要介绍数据库中数据的自相交拓扑检查。 创建拓扑 注意:拓扑是创建在... 阅读详情

查错
[Description]
一天,考试题神坑了。不过,我们的Mosaic还是成功的写出了程序,当然,结果比较赞:“TBMW*TBMW*”,结果被痛骂了一顿。经过漫长的检查,Mosaic发现他的程序有M处错误,现在要做的就是修改程序了。但是他发现,这M处错误存在复杂的联系,有的错误必须在其他错误之前改正,否则事情会变得很麻烦,因此,他开始写另一个程序来解决这个问题……

[Input]
第一行两个整数:M,N。N表示程序之间的依赖关系数量
以下N行每行两个整数a,b。表示第a处错误必须在第b处错误之前改正。

[Output]
一行,按改正顺序输出错误编号。若有多解,请输出字典序小的解(即尽量使编号小的错误先被改正)。如果无解,输出“OMG.”(不含引号)。

[Sample]
Sample Input
5 5
1 2
2 3
1 3
1 4
4 5
Sample Output
1 2 3 4 5

[Hint]
对于100%的数据,有0 < M,N ≤ 100000
保证没有重边。

感谢姜大神的标程让我学会了拓扑排序(以前对于topsort一窍不通),而且这道题的数据比较大,需要堆维护,很经典。 我们首先建边,记录每个点的入度,把每一个入度为零的点(其实就是目前可以做的任务)放进堆里进行维护。然后每一次都弹出堆里面的第一个元素,当这个元素出堆之后,所有必须在他之后的任务的入度都要减一,如果有些任务的入度减到0了,那么将这个任务入堆。反复的弹出第一个任务并且记录弹出元素的数量,然后删边,维护堆,直到堆里不再有元素。如果弹出的元素数量小于点数,那就说明有些任务不能完成,输出OMG,否则按顺序输出弹出的元素即可。

program mys;
type ab=^node;
node=record
ends:longint;
next:ab;
end;

var i,j,k,m,n,chu,t,x,y:longint;
p:array[0..200000]of ab;
f,a,d:array[0..200000]of longint;

procedure com(x,y:longint);
var i:ab;
begin 
i:=p[x];
new(p[x]);
p[x]^.ends:=y;
p[x]^.next:=i;
end;

procedure put(x:longint);
var i,j,k,g,h:longint;
begin
inc(t);
f[t]:=x;
j:=t;
i:=j div 2;
while (f[i]>f[j]) and (j>1) do
begin
k:=f[j]; f[j]:=f[i]; f[i]:=k;
j:=i;
i:=j div 2;
end;
end;

function get:longint;
var ff,son,p:longint;
begin 
get:=f[1];
f[1]:=f[t];
dec(t);
ff:=1;
while ff*2<=t do 
begin 
if (ff*2+1>t)or(f[ff*2]<f[ff*2+1]) then 
son:=ff*2
else son:=ff*2+1;
if f[ff]>f[son] then
begin
p:=f[ff]; f[ff]:=f[son]; f[son]:=p;
end;
ff:=son;
end;
end;

procedure fa;
var i:ab;
y,x:longint;
begin 
if t>0 then 
repeat
x:=get;
inc(chu);
a[chu]:=x;
i:=p[x];
while i<>nil do 
begin 
y:=i^.ends;
dec(d[y]);
if d[y]=0 then put(y);
i:=i^.next;
end;
p[x]:=nil;
until t<=0;
end;

begin 
assign(input,'correct.in'); reset(input);
assign(output,'correct.out'); rewrite(output);
readln(n,m);
for i:=1 to m do 
begin 
readln(x,y);
com(x,y);
inc(d[y]);
end;
for i:=1 to n do 
if d[i]=0 then put(i);
chu:=0;
fa;
if chu<n then 
begin 
writeln('OMG.'); 
close(input); 
close(output);
end;
for i:=1 to chu-1 do 
write(a[i],' ');
write(a[chu]);
close(input);
close(output);
end.
华为机试模拟题8实战解析:从字符串处理到图论拓扑排序 在准备华为OD机试或软件开发岗在线编程时,理解核心算法与高频题型是关键。机试通常围绕字符串处理、数组排序、双指针、动态规划与图论等基础算法展开,重点考察代码实现与抽象建模能力。本文以一套典型模拟题为例,拆解字符串压缩、区间合并、任务依赖调度三道代表性题目,覆盖从读题、设计思路到AC的完整过程,并总结了输入输出规范、复杂度估算、边界条件自测等实战细节。掌握排序加扫描、拓扑排序加动态规划等套路,能有效应对有依赖关系的调度问题。无论目标是华为机试还是其他大厂笔试,强化这些通用算法与工程实践技巧,都能显著提升通过率 阅读详情

相关推荐

NOIP考点总结

大家都很强, 可与之共勉 。一发NOIP考点的总结。共勉。http://blog.youkuaiyun.com/txl199106/article/details/71504478NOIP考纲总结+NOIP考前经验谈 首先来一张图,很直观(截止到2012年数据)下面是收集的一些,我改了一下红色加粗表示特别重要,必须掌握 绿色加粗表示最好掌握,可能性不是很大,但是某些可以提高程序效率高精度   a.加法

Lazer2001 2790

11、 拓扑排序

1、堆栈 栈是一种特殊的线性表,插入或删除栈元素的运算只能在表的一端进行,称运算的一端为栈顶,另一端称为栈底。队列也是一种特殊的线性表(基本操作都是线性操作的子集)。 特点:后进先出 栈又称为“后进先出”的线性表,简称LIFO表。 栈的链式实现是以链表作为栈的存储结构,并在这种存储结构上实现栈的基本运算。栈的链式实现称为链栈。 2、有向无环图 描述含有公共子式的表达式的有效...

hopegrace的博客 252

Java算法竞赛进阶:蓝桥杯国赛核心算法与高效训练心法

算法是计算机科学的核心基础,其本质是通过一系列指令高效解决特定问题的计算方法。理解算法的核心原理,如分治、动态规划、贪心、搜索等,是构建高效程序的关键。在工程实践中,算法的价值在于优化程序的时间与空间复杂度,解决大规模数据处理、路径规划、资源调度等实际问题。对于Java开发者而言,在算法竞赛和工程开发中,掌握常见算法模型并规避语言特性陷阱至关重要。本文聚焦于蓝桥杯国赛这一典型场景,深入剖析动态规划、图论搜索等高频考点,并探讨如何通过系统训练将算法知识内化为解题直觉。文中将结合快速幂、A*算法等具体技术,分享

weixin_34242331的博客 332

拓扑排序问题

拓扑排序算法的基本思路:从AOV网中,选择一个入度为0的顶点输出,然后删除此顶点,并删除此顶点为弧尾的弧,继续重复此步骤,直到输出所有全部顶点或者AOV网中不存在入度为0(存在环)的顶点为止。

辉 2352

【Dify深度解析】Workflow编排引擎的设计哲学与实战应用

本文深度解析了Dify Workflow编排引擎的设计哲学与实战应用。该引擎通过可视化拖拽和基于DAG的执行模型,将AI应用构建从“黑盒艺术”转变为可规划、可调试的“白盒工程”。文章详细剖析了其三层核心架构、模块化节点系统、数据流转机制及错误处理策略,并提供了自定义节点开发与性能优化指南,帮助开发者高效构建健壮、可维护的复杂AI应用流水线。

weixin_29300931的博客 278

深入解析Linux Suspend/Resume机制——从用户态到内核态的完整流程

本文深入解析Linux Suspend/Resume机制,从用户态触发到内核态执行的完整流程。详细介绍了三种挂起模式(Freeze、Standby、Suspend to RAM)的实现原理,包括系统调用入口、状态验证、设备挂起流程及平台相关操作。同时提供实战调试技巧,帮助开发者解决电源管理中的常见问题。

weixin_29313239的博客 442

拓扑排序算法分析(通俗易懂)

拓扑排序(其实是一种依赖关系):对于有向且无环的图来说,当前这个节点的依赖来其之前已经完成了。下面附上一个图让大伙更好的理解:比如这个图:B需要依赖A才能完成,A需要依赖C和D才能完成,而D需要依赖F才能完成,画出图就如上所示:而最终的拓扑排序序列则为:FDCAB(不难发现,入度最小的先遍历)基本思想:1. 先把入度为0 的节点找到并打印2. 删掉入度为0的节点,继续循环1的步骤,直至图为null...

hongjie_lin 2万+

探索Three.js:利用ShaderMaterial实现动态着色器特效

本文深入探讨了Three.js中ShaderMaterial的应用,指导开发者利用GLSL编写自定义着色器实现动态特效。文章从核心概念GLSL、Uniforms与Attributes讲起,通过创建动态颜色变化平面的实战案例,逐步进阶到实现波纹扩散与动态光影等高级效果,并提供了性能优化与调试技巧,帮助读者掌握创建高性能WebGL视觉特效的关键技能。

weixin_29250403的博客 201

查错(拓扑排序+堆维护)

拓扑排序 :由AOV网构造拓扑序列的拓扑排序算法主要是循环执行以下两步,直到不存在入度为0的顶点为止。(1) 选择一个入度为0的顶点并输出之;(2) 从网中删除此顶点及所有出边。循环结束后,若输出的顶点数小于网中的顶点数,则输出“有回路”信息,否则输出的顶点序列就是一种拓扑序列。 (摘自 : 百度百科)查错 [Description] 一天,考试题神坑了。不过,我们的 Mosaic 还是成功的写

Gxyhqzt的博客 500

wsl + vscode 离线配置 ERROR: Faild to download https://update.code.visualstudio.com

很多情况下是没有现成的VS Code Server程序的,需要手动下载。记住上面的Commit ID,可以通过下面的链接下载 vscode-server-linux-x64.tar.gz。然后将vscode-server-linux-x64.tar.gz上传在服务器上的$HOME/.vscode-server/bin文件夹中,解压。在wsl中下载不了 vscode 的核心。运行下面两行命令,建立空的$HOME/.vscode-server/bin文件夹。重新运行 wsl与vs的链接即可。

点云算法工程师 3789

【软件介绍】RVC本地部署使用方法

【摘要】RVC是一款功能强大的开源语音转换工具,具有实时处理、多音效选择、高质量音频处理等特点。文章详细介绍了RVC的安装与使用方法:1)配置Python环境;2)根据电脑系统选择对应安装包解压;3)启动程序进入浏览器操作界面。重点讲解了声音克隆的关键步骤:建议使用短音频素材,选择合适训练方法(推荐pm或rmvpe),设置100次训练轮数,生成的模型文件存入weights文件夹。最后通过上传音频即可实现声音克隆。操作过程需注意保持程序运行状态,并提供了相关资源下载地址。

心动的那一刻,记忆便盛开了花 2976

拓扑序列的最小字典序列

查错 考场上又写挂的一道签到题。。。 我们发现这题要求得到一个最小字典序列 显然找到所有序列然后排序是不可取的, 那么我们不能使用平常的拓扑排序方法,怎么搞使得在每次处理拓扑顺序的时候来维护呢? 用小根堆维护入度为0的点即可,输入的时候统计入度 {$inline on} const maxn=100010; type node=record p...

aocufei7257的博客 499

基于 Google Colab 的 mask rcnn 训练自己的数据集(以实例分割为例)

详细步骤1 数据集的制作1.1 数据标注1.2 生成数据集2 环境的搭建2.1 搭建流程2.2 注意事项(报错)3 开始训练4 可视化4.1 修改webcam.py文件4.2 进行可视化5 参考文章 1 数据集的制作 1.1 数据标注 使用 labelme=4.5.6 版本进行标注,标注文件指定到保存图片的路径下,也就是json文件和jpg文件放在同一个文件夹里 1.2 生成数据集 先手动划分训练集和测试集(包括图像和标注文件),然后分别整合它们的标注信息,参考代码:1_ships_to_coco.py

G果的博客 8001

NOIP考纲总结+NOIP考前经验谈

首先来一张图,很直观(截止到2012年数据) 下面是收集的一些,我改了一下 红色加粗表示特别重要,必须掌握 绿色加粗表示最好掌握,可能性不是很大,但是某些可以提高程序效率 高精度   a.加法   b.减法   c.乘法(应该只会有高精乘单精)   d.高...

weixin_30315905的博客 1421

大模型——AI对话四象限

{ "摘要": "文章揭示了90%的人不会有效与AI沟通的问题,指出简单粗暴的提问只能得到标准答案。作者提出'AI对话四象限'模型:1)双方都懂时提效;2)AI懂但需学会分层提问;3)共同探索未知领域;4)向AI传授独家知识。强调沟通技巧的重要性,认为会提问的人不会被AI替代。最后呼吁读者尝试四象限思维,与AI碰撞火花。" }

309

14、利用Helm和GitOps实现Kubernetes资源管理与CI/CD流程优化

本文介绍了如何结合Helm、GitOps和Terraform等工具,优化Kubernetes资源管理和CI/CD流程。内容涵盖了Helm提供程序的配置、GitOps的核心理念、CI/CD管道的构建与测试策略、GitHub源代码管理模型以及流程优化建议,旨在提升软件开发和部署的效率与质量。

y7z8a9的博客 154

蓝桥杯国赛C++ B组五题深度复盘:从BFS到DP的实战策略与代码优化

在算法竞赛和工程实践中,掌握核心数据结构和算法是解决复杂问题的基石。动态规划(DP)通过将问题分解为重叠子问题来寻找最优解,而广度优先搜索(BFS)则是解决最短路径和状态空间遍历的利器。这些技术的价值在于能够高效处理大规模数据,将理论时间复杂度转化为实际可运行的代码。在诸如路径规划、资源分配和系统仿真等应用场景中,它们发挥着关键作用。本文以蓝桥杯国赛真题为背景,深入剖析了**BFS的状态升维技巧**和**动态规划的状态设计**,分享了在高压比赛环境下如何权衡时间、选择算法并调试代码的实战经验,为算法学习者和

weixin_34320159的博客 380

C# WPS操作PPT,全屏,缩率图,备注,跳转播放

本文介绍了一个使用C#开发的PPT操作工具,主要功能包括检测当前打开的PPT文件、获取选中PPT路径、指定播放PPT、获取PPT页面序号和缩略图、提取备注内容等。文章展示了操作界面效果图,并重点解决了用户手动退出PPT后重新获取路径时报错的问题。核心代码实现了通过WPS API进行PPT文件的打开、全屏播放、页面跳转、获取当前页位置等功能,同时支持生成PPT缩略图预览和备注信息提取。当用户未通过工具按钮打开PPT时,程序会自动初始化PPT信息确保功能正常使用。

遇见--专栏 310

算法解题方法论:从问题建模到代码实现与优化的完整思维链路

算法是计算机科学的核心基础,其本质是一套解决问题的清晰指令集。理解算法原理,关键在于掌握如何将现实问题抽象为可计算模型,并选择合适的数据结构与策略进行高效求解。这一过程的技术价值在于培养严谨的计算思维和高效的工程实现能力,广泛应用于软件开发、数据分析、人工智能及各类算法竞赛等场景。本文聚焦于动态规划、图论等经典算法模型,深入探讨从理解题意、抽象建模、算法选型到代码实现与调试优化的完整解题链路,并分享滑动窗口、二分答案等高级思维技巧,旨在帮助学习者构建系统性的问题解决知识体系,实现从‘看懂题解’到‘独立解题’

weixin_34377919的博客 325

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

蓝桥杯国赛A~D题核心考点解析:从日期处理到分层图最短路

在算法竞赛和编程实践中,掌握核心数据结构和算法思想是解决复杂问题的关键。日期处理问题常涉及循环边界与闰年判断,其本质是将时间序列化进行数学计算,这能大幅提升效率,避免模拟超时。字符串与流程模拟题则考验将自然语言描述转化为精确计算机逻辑的能力,运用状态机思维和合适的数据结构(如StringBuilder)是保证正确性与性能的基础。动态规划(DP)通过定义状态与转移方程来寻找最优解,其关键在于识别最优子结构与重叠子问题,例如在网格路径问题中通过维度压缩来降低复杂度。图论算法如Dijkstra用于求解最短路,而面

weixin_30740581的博客 475

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

NOIP注意事项

高精度  a.加法  b.减法  c.乘法(应该只会有高精乘单精)   d.高精度除单精 (后面c,d考的可能性较小,应该只考a,b) 排序算法  a.选择排序  b.插入排序  c.hash排序  d.归并排序(单纯的排序可能用不到,有快排就行了,但是归并排序的思想很重要)  e.堆排序  f.快排 ...

weixin_30338461的博客 275

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

开源项目吐槽大会:技术社区的另一种成长方式

健康的开源生态不仅需要鲜花与掌声,也需要真诚、幽默、有料的“吐槽大会”。它像一面镜子,让项目看见盲点,让社区凝聚共识,最终推动整个技术栈向前滚动。请开始你的“表演”!

yandian666的博客 179

蓝桥杯国赛C++核心算法解析:动态规划、贪心与搜索优化实战

动态规划(DP)是一种通过将复杂问题分解为重叠子问题来求解最优解的算法思想,其核心在于状态设计和状态转移方程的建立。贪心算法则在每一步选择中都采取当前状态下最优的决策,其关键在于贪心策略的证明。在算法竞赛中,搜索算法(如DFS、BFS)是解决组合优化和路径查找问题的常用方法,但往往需要结合剪枝、状态压缩等优化技巧来应对大规模状态空间。这些基础算法不仅是计算机科学的核心内容,更是解决蓝桥杯等高水平算法竞赛题目的关键技术。它们广泛应用于路径规划、任务调度、资源分配等实际工程场景。本文以蓝桥杯国赛真题为例,深入剖

weixin_30729609的博客 344

蓝桥杯国赛真题深度解析:从算法原理到实战技巧

动态规划与并查集是算法竞赛中的核心数据结构与算法,广泛应用于路径规划、连通性分析等场景。动态规划通过状态定义与转移方程高效解决最优解问题,而并查集则擅长维护集合关系与连通分量。在工程实践中,状态压缩动态规划(状压DP)能有效处理组合优化问题,如任务分配。本文以蓝桥杯国赛真题为例,深入剖析矩阵路径计数、连通块维护等经典问题的解题思路,探讨如何将算法原理转化为高效、健壮的代码实现,帮助读者掌握竞赛中的核心优化策略与调试技巧。

weixin_34199335的博客 303
上一篇: 凯撒密码 (哈希+技巧)
下一篇: 数数 (数学)(快速幂+同余定理)
CodeOnce
博客等级 码龄10年 3粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值