結果

問題 No.629 グラフの中に眠る門松列
ユーザー maimai
提出日時 2018-01-11 21:06:50
言語 Ruby
(3.3.0)
結果
AC  
実行時間 92 ms / 4,000 ms
コード長 1,178 bytes
コンパイル時間 324 ms
コンパイル使用メモリ 11,344 KB
実行使用メモリ 15,448 KB
最終ジャッジ日時 2023-08-25 10:57:58
合計ジャッジ時間 6,435 ms
ジャッジサーバーID
(参考情報)
judge14 / judge15
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 85 ms
15,056 KB
testcase_01 AC 79 ms
15,284 KB
testcase_02 AC 81 ms
15,104 KB
testcase_03 AC 81 ms
15,248 KB
testcase_04 AC 81 ms
15,208 KB
testcase_05 AC 81 ms
15,148 KB
testcase_06 AC 81 ms
15,128 KB
testcase_07 AC 82 ms
15,060 KB
testcase_08 AC 81 ms
15,204 KB
testcase_09 AC 81 ms
15,096 KB
testcase_10 AC 82 ms
15,164 KB
testcase_11 AC 82 ms
15,020 KB
testcase_12 AC 81 ms
15,060 KB
testcase_13 AC 82 ms
15,100 KB
testcase_14 AC 82 ms
15,120 KB
testcase_15 AC 83 ms
15,144 KB
testcase_16 AC 82 ms
15,104 KB
testcase_17 AC 81 ms
15,048 KB
testcase_18 AC 82 ms
15,204 KB
testcase_19 AC 80 ms
15,248 KB
testcase_20 AC 82 ms
15,104 KB
testcase_21 AC 86 ms
15,384 KB
testcase_22 AC 85 ms
15,400 KB
testcase_23 AC 85 ms
15,428 KB
testcase_24 AC 92 ms
15,148 KB
testcase_25 AC 90 ms
15,328 KB
testcase_26 AC 90 ms
15,052 KB
testcase_27 AC 91 ms
15,264 KB
testcase_28 AC 84 ms
15,168 KB
testcase_29 AC 88 ms
15,264 KB
testcase_30 AC 90 ms
15,304 KB
testcase_31 AC 90 ms
15,448 KB
testcase_32 AC 91 ms
15,220 KB
testcase_33 AC 91 ms
15,212 KB
testcase_34 AC 89 ms
15,196 KB
testcase_35 AC 89 ms
15,416 KB
testcase_36 AC 91 ms
15,260 KB
testcase_37 AC 89 ms
15,240 KB
testcase_38 AC 91 ms
15,176 KB
testcase_39 AC 89 ms
15,212 KB
testcase_40 AC 87 ms
15,400 KB
testcase_41 AC 88 ms
15,184 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