1154. Vertex Coloring

Direct Link

#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;

vector<int> G[10000]; // ÁÚ½Ó±í
int color[10000];
unordered_map<int, bool> isVis;

int main() {
    ios::sync_with_stdio(false);
    int n, m, a, b, k;
    cin >> n >> m;

    for (int i = 0; i < m; i++) {
        cin >> a >> b;
        G[a].push_back(b);
        G[b].push_back(a);
    }
    cin >> k;
    for (int i = 0; i < k; i++) {
        int numOfColor = 0;
        isVis.clear();
        for (int j = 0; j < n; j++) {
            cin >> color[j];
            if (!isVis[color[j]]) {
                isVis[color[j]] = true;
                numOfColor += 1;
            }
        }
        bool isOk = true;
        for (int n1 = 0; n1 < n; n1++) {
            for (const auto &n2 : G[n1]) {
                if (color[n1] == color[n2]) {
                    isOk = false; break;
                }
            }
            if (!isOk) break;
        }
        if (isOk) cout << numOfColor << "-coloring" << endl;
        else cout << "No" << endl;
    }
    return 0;
}