【PAT-一道看着很难的水题】L2-023. 图着色问题

水题!没其他想说的,还以为可以搞点高大上的搜索呢!十五分钟,暴力两重循环就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;
}

原文地址:https://www.cnblogs.com/zhazhaacmer/p/8545282.html

时间: 2024-10-21 13:25:12

【PAT-一道看着很难的水题】L2-023. 图着色问题的相关文章

一道看上去很吓人的算法题 【微软面试去100题 第四十九题】

题目要求: 如何对n个数进行排序,要求时间复杂度O(N).空间复杂度为O(1). 题目分析: 严格的说,这道题给出的条件不全.如果这n个数字的大小跨度很大(1~无穷大),则肯定达不到要求. 如果n个数字的大小在一定范围内(如0~65535),则可以用hash表的方法.定义为int hash[65536],占用的内存空间固定为sizeof(int)*65536,则空间复杂度为O(1). 那么怎么时间复杂度为O(N)呢?即可以遍历几遍数组就可以排序完成.实际上我们可以遍历一遍数组,再遍历一遍hash

POJ 2328 Guessing Game(一道让我想哭的水题!)

[题意简述]:就是猜数,我想大家一定会在电视上看过这样类似的节目. [分析]:WA到死,本来就应该是一道简单的水题,但是由于我本人也很水,在控制字符的输入上有了点小问题,所以做了很久!想的也有点杂,有点多!还是题做得少. 这个是我WA到死的代码!! // WA 代码!! #include<iostream> #include<cstring> using namespace std; int main() { int a; char ans[10]; while(1) { bool

acm2063 很难的一题

本人目前为止 做过最难的一题 看了别人的代码半天才看懂 真正理解代码 用了一下午的时间.代码如下: #include<stdio.h>#include<string.h> int k,n,m;int p[500][500]={0};int luckboy[500]//一种标志 一定其luckboy[i]=1 表示i已经有后女友了 前女友不能再选他 (不能说i有女友) luckboy就一定为1 // 因为 luckboy每帮一位女士找到男朋友后 全部附为0 他的作用只是在帮i前女友找

HDU 2549 壮志难酬 (水题,但有个小坑!)

壮志难酬 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10552    Accepted Submission(s): 3512 Problem Description 话说MCA山上各路豪杰均出山抗敌,去年曾在江湖威名显赫的,江湖人称<万军中取上将首级舍我其谁>的甘露也不甘示弱,"天将降大任于斯人也,必先劳其筋骨,饿其

水果,一道对结构体排序的水题

题目链接:https://vjudge.net/contest/161356#problem/E 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了. Input 第一行正整数N(0<N<=10)表示有N组测试数据. 每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.其后有M行数据,每行表示一次交易,由水果

LeetCode67-二进制求和(很长的水题)

一眼就看出来肯定要溢出! 一次通过!而且是最优的方法 除了麻烦一点,没有太大的问题 主要是一次就能通过这么长的代码,我真的很强! 简洁是其次,代码最重要是易懂! public String addBinary(String a, String b) { //反着存,到最后反转即可 StringBuilder result = new StringBuilder(); //不对0,长度不一样,那么是要从各自右边算起,而不是取一个值 boolean flag = false; int i = a.l

pat(B) 1037. 在霍格沃茨找零钱(水题)

代码: #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; int main() { int h,m,s; int h0,m0,s0; while(scanf("%d.%d.%d%d.%d.%d",&h0,&m0,&s0,&h,&m,&s)!=EOF) {

5.1个人赛解题报告(区间dp,按位与或,图论等水题)

这次5.1打了一场个人赛,已经连赛了三周了,有点疲惫感觉,可能自己太水了,每次都有点小紧张. 这次只解出来三道题,然而有一道按位与按位或的水题不知道思路实在是做题太少,还有就是第一题区间DP,也消耗了不少的时间,但是没有成功的写出来,还是不够熟练啊. 下面写报告 A. System Administrator time limit per test 2 seconds memory limit per test 256 megabytes input standard input output

水题 Codeforces Round #299 (Div. 2) A. Tavas and Nafas

题目传送门 1 /* 2 很简单的水题,晚上累了,刷刷水题开心一下:) 3 */ 4 #include <bits/stdc++.h> 5 using namespace std; 6 7 char s1[11][10] = {"zero", "one", "two", "three", "four", "five", "six", "seven