AcWing 1648. 顶点着色
原题链接
简单
作者:
王小强
,
2021-03-02 10:18:55
,
所有人可见
,
阅读 428
根据题目意思模拟
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
int n, m, u, v, k;
int check(vector<vector<int>>& g, vector<int>& colors) {
for (int u = 0; u < g.size(); ++u)
for (const auto& v : g[u])
if (colors[u] == colors[v]) return -1; // conflict
unordered_set<int> s(begin(colors), end(colors));
return s.size();
}
int main(void) {
cin >> n >> m;
vector<vector<int>> g(n); // adjacency list
while (m--) {
cin >> u >> v;
g[u].emplace_back(v);
g[v].emplace_back(u);
}
cin >> k;
while (k--) {
vector<int> colors(n);
for (int i = 0; i < n; ++i) cin >> colors[i];
int ans = check(g, colors);
if (ans < 0) puts("No");
else printf("%d-coloring\n", ans);
}
}