一道水題,O(n^2)把圖遍曆一遍查看有沒有連在一起的頂點顏色一樣就行。
PS:顏色數需要等於k。
真不知道這麼一個水題,去年比賽的時候為啥腦子抽了分沒拿滿。。。
#include <stdio.h>#include <iostream>#include <string.h>using namespace std;#define MAX 505int Map[MAX][MAX];int V[MAX];int tc[MAX];int v, e, k ;void check(){ int flag = 0; for(int i = 1 ; i <= v ; i ++) { if(flag) break; for(int j = 0 ; j <= v ; j ++) { if(Map[i][j]==1) { if(V[i] == V[j]) { flag = 1; break; } } } } if(flag) printf("No\n"); else printf("Yes\n");}int main(){ scanf("%d%d%d" , &v, &e, &k); memset(Map, 0 , sizeof(Map)); int a, b; for(int i = 0 ; i < e ; i ++) { scanf("%d%d", &a, &b); Map[a][b] = 1; Map[b][a] = 1; } int flag, nnn; scanf("%d", &nnn); for(int i = 0 ; i < nnn ; i ++) { memset(tc, 0 , sizeof(tc)); flag = 0; for(int j = 1 ; j <= v ; j ++) { scanf("%d", &V[j]); if(tc[V[j]] == 0) { tc[V[j]] = 1; flag ++; } } if(flag != k) printf("No\n"); else { check(); } } return 0;}