// No.216 FAC // https://yukicoder.me/problems/no/216 // #include #include #include #include using namespace std; string solve(int N); int main() { int N; cin >> N; string ans = solve(N); cout << ans << endl; } string solve(int N) { // 問題ごとのスコア vector points(N); for (auto i = 0; i < N; i++) cin >> points[i]; // 問題ごとの1st回答者情報 vector results(N); for (auto i = 0; i < N; i++) cin >> results[i]; // 参加者のスコアを集計 vector scores(101, 0); // 参加者のスコアを0点で初期化(0番目がK君のスコア用) for (auto i = 0; i < N; i++) { if (results[i]) { // 回答済の場合、1st回答者にポイントを加算 scores[results[i]] += points[i]; } else { // そうでなければ、K君が解いたことにする scores[0] += points[i]; } } int others_max = *max_element(scores.begin()+1, scores.end()); // K君以外の最高スコア if (scores[0] >= others_max) return "YES"; else return "NO"; }