#include <algorithm>
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cstring>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <deque>
using namespace std;
const int MAX = 10010;
typedef struct Edge
{
int u, v;
Edge(int _u, int _v)
{
u = _u, v = _v;
}
}Edge;
int N, M, K;
int Color[MAX];//存贮每次分配的颜色
vector<Edge> E;//存贮每条边
int main()
{
scanf("%d %d", &N, &M);
for(int i=0, a, b; i<M; i++)
{
scanf("%d %d", &a, &b);
E.push_back(Edge(a, b));
}
scanf("%d", &K);
for(int i=0; i<K; i++)
{
set<int> S;//本次分配的颜色中的颜色个数
for(int j=0; j<N; j++)
{
scanf("%d", &Color[j]);
S.insert(Color[j]);
}
int j = 0;
while(j < E.size() && Color[E[j].u] != Color[E[j].v]) j++;
if(j != E.size()) printf("No\n");//有邻接相同的颜色,不符合规则
else printf("%d-coloring\n", S.size());//符合规则,输出颜色个数
}
return 0;
}
PAT (Advanced Level) Practice A1154 Vertex Coloring (25 分) (C++)(甲级)
最新推荐文章于 2022-10-29 16:58:14 发布