Pythonのツリーで、距離が正確にkである頂点の個別のペアの数を見つけます
整数kがあり、n個のノードを持つツリーがあるとすると、正確なk距離を持つ頂点の個別のペアの数を数える必要があります。
したがって、入力がk=2のような場合
その場合、出力は4になります
これを解決するには、次の手順に従います-
-
N:=5005
-
グラフ:=サイズNの隣接リスト
-
Vertex_count:=サイズ505x5005の2次元行列
-
res:=0
-
関数insert_edge()を定義します。これにはx、yが必要です
-
グラフの最後にyを挿入します[x]
-
グラフの最後にxを挿入します[y]
-
-
関数dfs()を定義します。これにはv、親が必要です
-
Vertex_count [v、0]:=1
-
グラフ[v]の各iについて、実行
-
私が親と同じでない場合は、
-
dfs(i、v)
-
1からk+1の範囲のjの場合、実行
-
res:=res + Vertex_count [i、j --1] * Vertex_count [v、k --j]
-
-
1からk+1の範囲のjの場合、実行
-
頂点カウント[v、j]:=頂点カウント[v、j] +頂点カウント[i、j-1]
-
-
-
例
理解を深めるために、次の実装を見てみましょう-
N = 5005 graph = [[] for i in range(N)] vertex_count = [[0 for i in range(505)] for i in range(N)] res = 0 def insert_edge(x, y): graph[x].append(y) graph[y].append(x) def dfs(v, parent): global res vertex_count[v][0] = 1 for i in graph[v]: if (i != parent): dfs(i, v) for j in range(1, k + 1): res += vertex_count[i][j - 1] * vertex_count[v][k - j] for j in range(1, k + 1): vertex_count[v][j] += vertex_count[i][j - 1] k = 2 insert_edge(1, 2) insert_edge(2, 3) insert_edge(3, 4) insert_edge(2, 5) dfs(1, 0) print(res)
k = 2 insert_edge(1, 2) insert_edge(2, 3) insert_edge(3, 4) insert_edge(2, 5)
出力
4
-
Pythonでサイズnxmの長方形の内側に配置できるサイズ2x1の長方形の数を見つけます
2つの値nとmがあるとします。サイズnxmの長方形の内側に設定できるサイズ2x1の長方形の数を見つける必要があります。考慮しなければならない条件はほとんどありません- 2つの小さな長方形を重ねることはできません。 すべての小さな長方形は、大きな長方形の内側に完全にあります。大きい方の長方形の端に触れることは許可されています。 したがって、入力が次のような場合 n =3、m =3の場合、出力は4になります。 これを解決するには、次の手順に従います- n mod 2が0と同じ場合、 return(n / 2)* m それ以外の場合、m mod 2
-
リスト内の最小数を見つけるPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが表示されます。リストで利用可能な最小の番号を表示する必要があります ここでは、リストを並べ替えて最小の要素を取得するか、組み込みのmin()関数を使用して最小の要素を取得できます。 次に、以下の実装の概念を観察しましょう- 例 list1 = [101, 120, 104, 145, 99] # sorting using built-in function list1.sort() print("Smallest element is:", list1[0]) 出力 Smal