PAT A1154 Vertex Coloring
- 还以为是地图涂色,吓坏了,实际上只是检验邻接点有没有相同的颜色,然后数一下颜色个数
- 颜色个数用set来数,输入完图和每个顶点的color之后,遍历每个顶点的邻接点,看两个点的颜色是否相同,over~
#include<iostream>
#include<vector>
#include<set>
using namespace std;
vector<vector<int> > vv;
vector<int> color;
int main(){
int N,M,K;
cin >> N >> M;
vv.resize(N);
color.resize(N);
for(int i = 0;i < M;i ++){
int a,b;
cin >> a >> b;
vv[a].push_back(b);
vv[b].push_back(a);
}
cin >> K;
for(int i = 0;i < K;i ++){
set<int> s;
for(int j = 0;j < N;j ++){
cin >> color[j];
s.insert(color[j]);
}
bool flag = true;
for(int j = 0;j < N;j ++){
for(int k = 0;k < vv[j].size();k ++){
if(color[vv[j][k]] == color[j]){
flag = false;
break;
}
}
if(!flag) break;
}
if(flag) cout << s.size() << "-coloring\n";
else cout << "No\n";
}
return 0;
}