結果

問題 No.629 グラフの中に眠る門松列
ユーザー maimai
提出日時 2018-01-11 21:06:50
言語 Ruby
(3.3.0)
結果
AC  
実行時間 107 ms / 4,000 ms
コード長 1,178 bytes
コンパイル時間 66 ms
コンパイル使用メモリ 7,552 KB
実行使用メモリ 12,672 KB
最終ジャッジ日時 2024-06-06 05:40:02
合計ジャッジ時間 5,432 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 92 ms
12,288 KB
testcase_01 AC 96 ms
12,288 KB
testcase_02 AC 91 ms
12,160 KB
testcase_03 AC 91 ms
12,160 KB
testcase_04 AC 89 ms
12,160 KB
testcase_05 AC 90 ms
12,032 KB
testcase_06 AC 89 ms
12,032 KB
testcase_07 AC 89 ms
12,160 KB
testcase_08 AC 91 ms
12,288 KB
testcase_09 AC 90 ms
12,032 KB
testcase_10 AC 89 ms
12,288 KB
testcase_11 AC 91 ms
12,160 KB
testcase_12 AC 92 ms
12,032 KB
testcase_13 AC 89 ms
12,160 KB
testcase_14 AC 90 ms
12,032 KB
testcase_15 AC 91 ms
12,160 KB
testcase_16 AC 90 ms
12,032 KB
testcase_17 AC 91 ms
12,032 KB
testcase_18 AC 89 ms
12,288 KB
testcase_19 AC 91 ms
12,032 KB
testcase_20 AC 90 ms
12,160 KB
testcase_21 AC 98 ms
12,416 KB
testcase_22 AC 96 ms
12,288 KB
testcase_23 AC 97 ms
12,288 KB
testcase_24 AC 101 ms
12,160 KB
testcase_25 AC 101 ms
12,288 KB
testcase_26 AC 105 ms
12,544 KB
testcase_27 AC 104 ms
12,544 KB
testcase_28 AC 97 ms
12,288 KB
testcase_29 AC 100 ms
12,672 KB
testcase_30 AC 107 ms
12,544 KB
testcase_31 AC 103 ms
12,544 KB
testcase_32 AC 103 ms
12,672 KB
testcase_33 AC 101 ms
12,672 KB
testcase_34 AC 101 ms
12,544 KB
testcase_35 AC 101 ms
12,672 KB
testcase_36 AC 102 ms
12,672 KB
testcase_37 AC 99 ms
12,672 KB
testcase_38 AC 105 ms
12,672 KB
testcase_39 AC 102 ms
12,544 KB
testcase_40 AC 100 ms
12,672 KB
testcase_41 AC 99 ms
12,544 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
Syntax OK

ソースコード

diff #

def ascan; gets.split.map(&:to_i);end


N, M = ascan
A    = ascan

# 隣接リスト
adjacents = Array.new(N){[]}

M.times do
    u, v = ascan
    u -= 1; v -= 1
    adjacents[u] << v
    adjacents[v] << u
end


ans = 0

# 頂点vを中心とする長さ2のパスについて調べたい
0.upto(N-1) do |v|
    
    # 頂点 v に書かれた数字
    a = A[v]
    
    # aより小さな数字が書かれた頂点 {key:数字, value:個数}
    small = Hash.new(0)
    # aより大きな数字が書かれた頂点
    large = Hash.new(0)
    
    adjacents[v].each do |u|
        small[A[u]] += 1 if A[u] < a
        large[A[u]] += 1 if A[u] > a
    end
    
    # aが最大となる🎍パスの数え上げ
    unless small.empty?
        cnt = small.values.reduce(:+)
        ans += cnt*(cnt-1)/2
        small.each do |key, val|
            ans -= val*(val-1)/2
        end
    end
    
    # aが最小となる🎍パスの数え上げ
    unless large.empty?
        cnt = large.values.reduce(:+)
        ans += cnt*(cnt-1)/2
        large.each do |key, val|
            ans -= val*(val-1)/2
        end
    end
    
end

# 個数
# p ans

puts ans > 0 ? :YES: :NO
0