很简单的一道题,前期卡在了第二个段错误
后来发现颜色的编号是int型范围,果然把10010大小的bool哈希数字换成了set
此处还是有点紧张,因为担心set超时,不过还好过了
#include <iostream>
#include <map>
#include <string>
#include <cstring>
#include <vector>
#include <algorithm>
#include <set>
#include <cmath>
using namespace std;
int N,M,K;
vector<int>w[10010];
int color[10010];
set<int>vis;
int main(){
cin>>N>>M;
int a,b;
while(M--){
cin>>a>>b;
w[a].push_back(b);
}
cin>>K;
while(K--){
vis.clear();
int num=0;
for(int i=0;i<N;i++){
cin>>color[i];
if(vis.find(color[i])==vis.end()){
vis.insert(color[i]);
num++;
}
}
bool flag=true;
for(int i=0;i<N;i++){
for(int j=0;j<w[i].size();j++){
if(color[i]==color[w[i][j]])
flag=false;
}
}
if(flag)
printf("%d-coloring\n",num);
else
printf("No\n");
}
return 0;
}