木の直径を求める2つの主要アプローチ
木の直径(Tree Diameter)とは、木構造グラフにおいて最も離れた2つのノード間の距離を指します。この計算には、主に深さ優先探索(DFS)を2回行う方法と、動的計画法(DP)を用いる方法の2つが広く知られています。本記事では、それぞれのアルゴリズムの原理と実装手法について解説します。
DFSによる2回の探索アプローチ
この手法は非常に直感的で、計算量も効率的です ...
7月14日 23:27 投稿
noip2014day1問題解説
説明
石切りバサミは一般的なジャンケンゲームです:石はハサミを勝ち、ハサミは布を勝ち、布は石を勝ちます。二人が同じ手を出した場合、勝敗はありません。『ライフ・オブ・ザ・ビーチ』第2シーズン第8話で登場したアップグレード版のジャンケンゲームでは、この伝統的なジャンケンゲームに二つの新しいジェスチャーが追加されました:
スポック:『スターゲート・ドライ ...
7月3日 19:26 投稿
C++による競技プログラミング問題の解決アプローチ
基本的な比較計算
二つの整数の積を比較する問題では、直接的な計算を用いる。
#include <iostream>
int main() {
long long w, x, y, z;
std::cin >> w >> x >> y >> z;
std::cout numA >> numB;
std::cout 1) isCritical[node] = true;
}
int main() {
int cols;
cin >> cols;
string rowA, rowB;
cin >> rowA >> rowB;
i ...
6月28日 22:57 投稿
ネットワーク最大流アルゴリズムの実装と最適化
ネットワーク最大流問題は、有向グラフ上で容量制限付きの辺を持つネットワークにおいて、ソース(始点)からシンク(終点)へ送ることのできる最大流量を求める古典的な最適化問題である。この問題は二部マッチングや資源配分など多くの応用に利用される。
基本概念
フローネットワーク:ソース s とシンク t を持つ有向グラフ。s からは流出のみ、t へは流入のみが許 ...
6月26日 18:51 投稿
Codeforces 近況コンテストにおける高度なアルゴリズム技法と実装パターン
区間交差関係に基づく最小全域木構築
与えられた区間集合において、交差する区間同士を結ぶ辺の重みを権重の差とし、生成されるグラフの最小全域木を求める問題。辺を全列挙すると計算量が爆発するため、幾何学的性質と貪欲戦略を組み合わせる。権重が小さい区間から順にアクティブな集合に追加し、各区間の挿入・削除タイミング(スライン法)において、権重でソートされ ...
6月24日 18:37 投稿
グラフ理論と行列操作アルゴリズム
100. 島の最大面積
与えられた1(陸地)と0(水)からなる行列において、島の最大面積を計算します。島は水平または垂直方向に隣接する陸地で構成され、周囲が水で囲まれているものとします。
from collections import deque
def max_area_of_island(grid):
rows, cols = len(grid), len(grid[0])
max_area = 0
for i in range(rows):
for j in ...
6月18日 17:18 投稿
グラフ理論のアルゴリズム実装ノート
1. 隣接行列を用いたDFS(再帰実装)
class GraphStructure {
public:
GraphStructure(int nodes);
void addConnection(int src, int dst);
void traverseDFS(int startNode);
private:
int nodeCount;
vector<vector<int>> adjacencyMatrix;
vector<bool> visitedFlags;
void dfsRecursive(int current);
};
GraphStruc ...
6月15日 20:13 投稿
グラフ理論における関節点、橋、および二重連結成分の解析
グラフ理論において、無向グラフの構造を分析する重要な概念として関節点、橋、二重連結成分があります。これらの概念はグラフの連結性を評価し、グラフの脆弱性を特定するために不可欠です。
関節点 (Articulation Points)
概要
無向グラフから特定の頂点を削除した後、グラフの連結成分の数が増加する場合、その頂点は関節点と呼ばれます。関節点はグラフの連結性を維 ...
6月14日 20:54 投稿
農場ネットワークの最小全域木問題
問題概要
ジョン農場主が町長に選出されました!彼の選挙公約の一つは、町全体にインターネットを導入し、すべての農場を接続することです。もちろん、彼はあなたの助けが必要です。
ジョンはすでに自身の農場に高速ネットワーク回線を設置済みであり、これを他の農場と共有したいと考えています。費用を最小限に抑えるため、すべての農場を接続する最短の光ファイバーを ...
6月14日 18:40 投稿
C++プログラミングコンテスト問題集と解答例
L1-1 挨拶出力
解法
指定されたテキストをそのまま出力する。
実装例
#include <iostream>
using namespace std;
int main() {
cout << "ありがとう!\\(>_<)/" << endl;
return 0;
}
L1-2 平均速度計算
実装例
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int distance, time;
cin & ...
6月10日 20:29 投稿