【发布时间】:2014-02-10 18:37:38
【问题描述】:
有n个顶点由m条边连接。有些顶点是特殊的,有些是普通的。从一个顶点到另一个顶点最多有一条路径。
第一个查询: 我需要找出存在多少对直接或间接连接的特殊顶点。
我的方法: 我将应用 BFS(通过队列)以查看有多少节点以某种方式相互连接。让我在此发现的特殊顶点的数量为 n,然后对我的查询的回答将是 nC2。我将重复此操作直到所有顶点被访问。
第二个查询: 任意两个特殊顶点之间的路径上有多少个顶点。
我的方法: 在查询 1 的方法中,我将应用 BFS 来找出任意两个特殊顶点之间的路径,然后回溯并标记路径上的顶点。
问题: 顶点数可高达 50,000。因此,应用 BFS,然后我猜,对于我的时间限制(2 秒),回溯会更慢。
我有所有顶点的列表及其邻接列表。现在,在 BFS 期间在我的队列中推送顶点时,我还能以某种方式计算查询 2 的答案吗?有没有更好的方法可以用来解决问题?输入格式是这样的,我会被一一告知一个顶点是否特殊,然后我会得到关于连接两个顶点的第 i 条路径的信息。从一个顶点移动到另一个顶点最多有一条路径.
【问题讨论】:
-
从 1 个顶点移动到另一个顶点的最多 1 条路径 --> 图是一棵树或一片森林。
-
那些投反对票的人,有什么问题?对我来说,这是一个很好的问题。
-
图是一片森林
-
什么是
special顶点? -
我不明白为什么人们反对这个。并不是说我不费吹灰之力就可以解决问题。
标签: c++ graph-theory