#3672. 深度优先搜索 (dfs)
深度优先搜索 (dfs)
题目描述
有份 dfs 的代码:
void dfs(int u) {
vis[u] = true;
for (int v = 1; v <= n; v++)
if (g[u][v] == true && vis[v] == false)
dfs(v), link(u, v);
}
这个代码表示对一个点数为 的无向连通图进行遍历。
其中 是一个布尔数组,如果图有边 则 ,否则 。特别地,对于任意的 都有 。
表示在另一个点数为 的图 上连边 。注意,初始时 中只有 个点而没有任何边。容易得到,执行 之后 将会是一棵树。
求对于给定的树 ,有多少个没有重边和自环的无向连通图 满足对 执行 之后得到的树 与给定的树完全一样?
两个图完全一样,当且仅当这两个图的节点数相同并且对于第一个图的任意一条边 ,第二个图中都有边 存在。
输入格式
在文件 dfs.in 中读入。
第一行一个正整数 ,表示树 的点数,也是无向连通图的点数。
接下来的 行,每行两个正整数 ,表示树 上有边 。
输出格式
在文件 dfs.out 中输出。
输出一个整数表示答案。由于答案可能很大,你只要输出其对 取模后的结果。
样例
样例输入 #1
5
1 2
1 3
2 4
2 5
样例输出 #1
4
样例 1 解释
下面这张图是一个合法的图 ,加粗的边即为执行了 dfs(1) 后得到的树 :

样例输入 #2
8
1 2
1 3
2 4
2 5
1 7
6 7
8 6
样例输出 #2
16
数据范围
- 对于前 的数据,;
- 对于前 的数据,;
- 对于所有数据,。
相关
在下列比赛中: