水题! 没其他想说的, 还以为可以搞点高大上的搜索呢! 十五分钟, 暴力两重循环就 OK 了!
代码如下:
- #include<iostream>
- #include<stdio.h>
- #include<string.h>
- #include<math.h>
- #include<algorithm>
- #include<queue>
- #include<set>
- #include<vector>
- #include<map>
- #define maxn 400000
- #define inf 0x3f3f3f3f //l2-023;
- using namespace std;
- int n,m,k;
- #define N 505
- int a[N][N];// 邻接矩阵
- int main(){
- while(scanf("%d%d%d",&n,&m,&k)!=EOF){
- memset(a,0,sizeof(a));
- int s,d;
- for(int i=1;i<=m;i++){
- scanf("%d%d",&s,&d);
- a[s][d]=a[d][s]=1;
- }
- int q,c;
- scanf("%d",&q);
- while(q--){
- int num=n,vis[N]={0},color[N]={0};// 判断颜色种类数是否超过 K
- for(int i=1;i<=n;i++){
- scanf("%d",&c);
- vis[c]++;
- if(vis[c]>1)num--;
- color[i]=c;
- }
- if(num!=k){// 第一次写的是 num>k WA 了一个样例!
- printf("No\n");
- }else{
- int flag=0;
- for(int i=1;i<=n&&!flag;i++){
- for(int j=1;j<=n&&!flag;j++){
- if(i!=j&&a[i][j]==1){
- if(color[i]==color[j]){
- flag=1;break;
- }
- }
- }
- }
- if(flag)printf("No\n");
- else printf("Yes\n");
- }
- }
- }
- return 0;
- }
- View Code
来源: http://www.bubuko.com/infodetail-2524169.html