0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

今回は paiza の「隣接頂点の出力」の問題に挑戦!

🧩 問題概要

■ 何が与えられる?

  • 頂点が 1〜n まで番号づけされた無向グラフ
  • 自己ループなし
  • 多重辺なし
  • 隣接リスト形式で入力される
  • 特定の頂点 s

■ 入力の構造

  • 1行目
    • n(頂点数)
    • s(対象の頂点)
  • その後、各頂点 i (1〜n) について:
    • 頂点 i に隣接している頂点の数 v_i
    • 頂点 i に隣接している頂点番号

■ やること

  • 頂点 s に 隣接している頂点の中で
  • 最も番号が大きい頂点を出力する


入力例:

3 2
1
2
2
1 3
1
2

出力例:

3






✅OK例:

const rl = require('readline').createInterface({ input: process.stdin });

const lines = [];
rl.on('line', line => lines.push(line));

rl.on('close', () => {
    const [n, s] = lines[0].split(' ').map(Number);
    
    const graph = [];
    for (let i = 2; i <= n*2; i++) {
        if (i % 2 === 0) {
            graph.push(lines[i].split(' ').map(Number));
        }
    }
    
    const ans = Math.max(...graph[s-1]);
    console.log(ans);
});

🔍コードの流れ

  • readlineで標準入力を受け取る準備をする
  • 入力された各行を配列 lines に保存する
  • 1行目から
    • 頂点数 n
    • 調べたい頂点 s
      を取得する
  • 空の配列 graph を用意する
  • 2行目以降をループで確認する
    • 偶数行(隣接頂点が書かれている行)だけを取り出す
    • その行を数値配列に変換して graph に追加する
    • これで
      • graph[0] = 頂点1の隣接リスト
      • graph[1] = 頂点2の隣接リスト
        という形になる
  • s は1から始まる番号なので
    • 配列用に s-1 に変換する
  • graph[s-1] の中から Math.max を使って最大の頂点番号を取得する
  • その最大値を出力する





📝まとめ

「隣接リストを配列に格納 → s番目の配列の最大値を出す」だけの処理


隣接リストの読み取り

  • グラフは「隣接リスト」で表現できる
  • graph[i] = 頂点 i+1 の隣接頂点配列
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?