atcoder#AGC056F. [AGC056F] Degree Sequence in DFS Order
[AGC056F] Degree Sequence in DFS Order
题目描述
整数 と が与えられます. 以下の手順で生成されうる整数列 の個数を で割った余りを求めてください.
- 頂点, 辺からなる連結な無向グラフ を用意する. ここで, は自己ループを含んではならないが,多重辺を含んでもよい.
- 上で DFS を行い, () 番目に訪れた頂点の次数を とする. より正確には,以下の疑似コードを実行して を得る.
a = empty array
dfs(v):
visited[v]=True
a.append(degree[v])
for u in g[v]:
if not visited[u]:
dfs(u)
dfs(arbitrary root)
ここで,変数 はグラフ を隣接リストとして表したものであり, は頂点 に隣接する頂点を任意の順番で格納したリストである.
例えば, の時, を生成することは可能です. そのためには,以下のようなグラフ を用意すればよいです.
ここで,頂点にかかれている数は,その頂点を DFS で何番目に訪れたかを表しています.( と書かれた頂点から DFS を開始しています.) また,オレンジ色の矢印は DFS での遷移を示しており,その横の数字は辺をたどる順番を表しています.
输入格式
入力は以下の形式で標準入力から与えられる.
输出格式
答えを出力せよ.
题目大意
题目描述
已知整数 , 求有多少个整数序列 可以由以下方式生成,答案对 取模。
- 选择一个 个点, 条边的无向连通图 ,要求无自环,但可以有重边。
- 进行 DFS,令 表示遍历到的第 个点的度数,具体的,执行以下代码:
a = empty array
dfs(v):
visited[v]=True
a.append(degree[v])
for u in g[v]:
if not visited[u]:
dfs(u)
dfs(arbitrary root)
这里, 是图 的邻接表, 是任意顺序的与 相连的顶点列表。
举个例子,对于 ,一个可能的 ,图 如下图所示:
顶点上的数字表示访问他们的顺序,橙色箭头表示遍历时经过的边。
数据范围
- 。
输入格式
一行两个数 。
输出格式
一行一个数,表示答案。
样例解释
只有 合法。
Translated by @nr0728.
2 2
1
3 4
9
10 20
186225754
100000 1000000
191021899
提示
制約
- 入力される値はすべて整数である
Sample Explanation 1
あり得るのは のみです. は多重辺を持ってもよいことに注意してください.