微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有一种有效的方法在删除边后在生成树图中查找组件的大小?

如何解决有没有一种有效的方法在删除边后在生成树图中查找组件的大小?

我的任务是在具有Q个节点的生成树图中高效处理N查询

每个查询都涉及到我需要处理的一条边,我应该输出图中删除该边后剩余的两个分量的大小。

我当前的想法是从该边缘连接的两个节点启动DFS,确保DFS永不跨越边缘本身。这样,我就能在O(N)的时间内找到两个组件的大小,总复杂度为O(Q * N)

但是,我认为可以进行某种预处理来进一步降低解决方案的时间复杂度,但我只是想不出那是什么。有人可以指出我正确的方向吗?

解决方法

好吧,这是我刚想出的一种策略:

首先,找到一个度数完全为1(保证在生成树图中存在的节点;它被称为“叶”)。从该节点运行DFS,并保留一个变量count,该变量表示到目前为止已被访问的节点数。每次遍历一条边缘时,由于树的特殊属性(具体而言,之间只有一条路径,因此,删除该边缘形成的两个分量的大小必须等于countN - count)任何一对节点)。这样就产生了具有O(N)预处理和O(1)查询应答的算法,总时间复杂度为O(N + Q)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。