[AtCoder] ABC 166 C – Peaks

2020年12月14日

問題

方針

展望台 \( i \) が隣接している全ての展望台の中で一番高いかどうかという情報を求めます。これは、全ての道について、\( H(A_i) \) と \( H(B_i) \) という値を比較すれば十分です。

コード

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
    int N, M;
    cin >> N >> M;
    int A[M], B[M], H[N];

    for (int i = 0; i < N; i++) {
        cin >> H[i];
    }
    for (int i = 0; i < M; i++) {
        cin >> A[i] >> B[i];
        A[i]--;
        B[i]--;
    }
    bool flag[N];
    fill(flag, flag + N, true);
    for (int i = 0; i < M; i++) {
        if (H[A[i]] == H[B[i]]) {
            flag[A[i]] = false;
            flag[B[i]] = false;
        } else if (H[A[i]] < H[B[i]]) {
            flag[A[i]] = false;
        } else {
            flag[B[i]] = false;
        }
    }
    int cnt = 0;
    for (bool b : flag) {
        if (b) cnt++;
    }
    cout << cnt << "\n";
    return 0;
}