PAT 1154
写在前面2019.8.16,准备pat,记录一下易犯的错误。
###题意
。。。
###注意点
存储颜色时不能用数组映射,题目给的范围是int,得用set记录。
代码块
#include <bits/stdc++.h>
#include <iostream>
#include <algorithm>
using namespace std;
#define ll long long
#define MAX 10005
int n,m,k,a,b, num, flag;
struct node {
int to, next;
}edge[MAX*4];
int cnt, head[MAX];
int vis[MAX], mark[MAX];
int main () {
//cin>>n>>m;
scanf("%d%d", &n, &m);
cnt = 0;
memset(head, -1, sizeof(head));
for (int i = 0; i < m; i++) {
scanf("%d%d", &a, &b);
edge[i].to = a;
edge[i].next = b;
}
scanf("%d", &k);
//cin>>k;
while(k--) {
set<int> s;
int color[MAX] = {0};
for (int i = 0; i < n; i++) {
scanf("%d", &color[i]);
s.insert(color[i]); //这里必须用set,不能用MAX数组映射,因为题目说
//each contains N colors which are represented by non-negative integers in the range of int
//而且int是加粗的,不应该犯的错误。
}
flag = 0;
for (int i = 0; i < m; i++) {
if (color[edge[i].to] == color[edge[i].next]) {
flag = 1;
break;
}
}
if (!flag) printf("%d-coloring\n", s.size());
else printf("No\n");
}
return 0;
}