1154 Vertex Coloring (25 分)
题目要求
给定点、边
一条边上的两个点不能为相同颜色
如符合以上条件,输出所用颜色个数
解题思想
定义边结构
使用unordered_set统计颜色个数
使用c[]存放每个点的颜色
AC代码
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <unordered_set>
using namespace std;
struct edge{
int a, b;
};
int main(){
int n, m, k;
scanf("%d%d", &n, &m);
vector<edge> e(m);
for (int i = 0; i < m; i++)
scanf("%d%d", &e[i].a, &e[i].b);
scanf("%d", &k);
while (k--){
int c[n];
unordered_set<int> s;
for (int i = 0; i < n; i++){
scanf("%d", &c[i]);
s.insert(c[i]);
}
int isColoring = 1;
for (int i = 0; i < m; i++){
if (c[e[i].a] == c[e[i].b]){
isColoring = 0;
break;
}
}
if (isColoring) printf("%d-coloring\n", int(s.size()));
else printf("No\n");
}
return 0;
}