⬆︎
×

[PAT-A] 1166 Summit

Hyplus目录

Java

import java.io.*;
import java.util.*;

public class Main {
    static final int N = 210;

    static int n, m;
    static boolean[][] g = new boolean[N][N];
    static boolean[] tag = new boolean[N];
    static int[] seq = new int[N];
    static Set<Integer> set = new HashSet<>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());

        for (int i = 0; i < m; i++) {
            st = new StringTokenizer(br.readLine());
            int head1 = Integer.parseInt(st.nextToken());
            int head2 = Integer.parseInt(st.nextToken());
            g[head1][head2] = g[head2][head1] = true;
            tag[head1] = tag[head2] = true;
        }

        int k = Integer.parseInt(br.readLine());
        for (int areaNum = 1; areaNum <= k; areaNum++) {
            set.clear();

            st = new StringTokenizer(br.readLine());
            int groupSize = Integer.parseInt(st.nextToken());
            for (int i = 0; i < groupSize; i++) {
                seq[i] = Integer.parseInt(st.nextToken());
                set.add(seq[i]);
            }

            boolean isComplete = true;
            for (int i = 0; i < groupSize && isComplete; i++) {
                for (int j = i + 1; j < groupSize; j++) {
                    if (!g[seq[i]][seq[j]]) {
                        isComplete = false;
                        break;
                    }
                }
            }
            if (!isComplete) {
                System.out.printf("Area %d needs help.%n", areaNum);
                continue;
            }

            boolean canAddMore = false;
            for (int i = 1; i <= n && !canAddMore; i++) {
                if (tag[i] && !set.contains(i)) {
                    boolean canAdd = true;
                    for (int j = 0; j < groupSize; j++) {
                        if (!g[i][seq[j]]) {
                            canAdd = false;
                            break;
                        }
                    }
                    if (canAdd) {
                        System.out.printf("Area %d may invite more people, such as %d.%n", areaNum, i);
                        canAddMore = true;
                    }
                }
            }
            if (!canAddMore) {
                System.out.printf("Area %d is OK.%n", areaNum);
            }
        }
    }
}

C++

#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_set>

using namespace std;

const int N = 210;

int n, m;
bool g[N][N], tag[N];        // [1, n]
int seq[N];
unordered_set<int> st;

int main() {
    scanf("%d%d", &n, &m);

    for (int i = 0; i < m; ++i) {
        int a, b;
        scanf("%d%d", &a, &b);
        g[a][b] = g[b][a] = true;
        tag[a] = tag[b] = true;
    }

    int Q;
    scanf("%d", &Q);
    for (int k = 1; k <= Q; ++k) {
        st.clear();

        int num;
        scanf("%d", &num);
        for (int i = 0; i < num; ++i) {
            scanf("%d", &seq[i]);
            st.insert(seq[i]);
        }

        bool flag = true;
        for (int i = 0; i < num; ++i)
            for (int j = i; j < num; ++j)
                if (i != j && !g[seq[i]][seq[j]]) {
                    flag = false;
                    break;
                }
        if (!flag) {
            printf("Area %d needs help.\n", k);
            continue;
        }

        for (int i = 1; i <= n; ++i)
            if (tag[i] && !st.count(i)) {
                bool is_valid = true;
                for (int j = 0; j < num; ++j)
                    if (!g[i][seq[j]]) {
                        is_valid = false;
                        break;
                    }
                if (is_valid) {
                    printf("Area %d may invite more people, such as %d.\n", k, i);
                    flag = false;
                    break;
                }
            }

        if (flag) printf("Area %d is OK.\n", k);
    }

    return 0;
}

发表评论