分析
大致题意:给出图,并给图中的点上色
若有2个点相同颜色,则no
若无,则输出颜色数量
进一步分析
点上色:map保存颜色
查找是否有相同颜色:图的遍历
颜色数量:用set不可重复的特性保存颜色
代码
#include<bits/stdc++.h>
using namespace std;
int vertex, edge, quantity;
bool flag;
vector<int>* graph;
bool Judge() {
int x;
map<int, int>vertex_color;
set<int>color;
for (int i = 0; i < vertex; i++) {
scanf("%d", &x);
vertex_color[i] = x;
color.insert(x);
}
for (int i = 0; i < vertex; i++) {
for (auto j = graph[i].begin(); j != graph[i].end(); j++) {
if (vertex_color[i] == vertex_color[*j]) {
return false;
}
}
}
printf("%d-coloring\n",color.size());
return true;
}
int main() {
scanf("%d %d", &vertex, &edge);
graph = new vector<int>[vertex];
int x, y;
for (int i = 0; i < edge; i++) {
scanf("%d %d", &x, &y);
graph[x].push_back(y);
graph[y].push_back(x);
}
scanf("%d", &quantity);
for (int k = 0; k < quantity; k++) {
flag = Judge();
if (!flag) printf("No\n");
}
return 0;
}