L2-023 图着色问题
Statement
Metadata
- 作者: 陈越
- 单位: 浙江大学
- 代码长度限制: 16 KB
- 时间限制: 300 ms
- 内存限制: 64 MB
图着色问题是一个著名的NP完全问题。给定无向图
但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。
输入格式
输入在第一行给出3个整数
输出格式
对每种颜色分配方案,如果是图着色问题的一个解则输出Yes
,否则输出No
,每句占一行。
输入样例
输出样例
Solution
#include <bits/stdc++.h>
using namespace std;
#define N 510
int n, m, k;
vector<int> G[N];
int v[N];
map<int, int> mp;
bool ok() {
for (int i = 1; i <= n; ++i)
for (auto j : G[i])
if (v[i] == v[j])
return 0;
return 1;
}
int main() {
while (scanf("%d%d%d", &n, &m, &k) != EOF) {
for (int i = 1; i <= n; ++i) G[i].clear();
for (int i = 1, u, v; i <= m; ++i) {
scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
int q;
scanf("%d", &q);
while (q--) {
int cnt = 0;
mp.clear();
for (int i = 1; i <= n; ++i) {
scanf("%d", v + i);
if (mp[v[i]] == 0) {
mp[v[i]] = 1;
++cnt;
}
}
if (cnt != k)
puts("No");
else
puts(ok() ? "Yes" : "No");
}
}
return 0;
}
Last update: May 4, 2022