zoukankan      html  css  js  c++  java
  • L2-023. 图着色问题(暴力)

    L2-023. 图着色问题

    时间限制
    300 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    陈越

    图着色问题是一个著名的NP完全问题。给定无向图 G = (V, E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色?

    但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。

    输入格式:

    输入在第一行给出3个整数V(0 < V <= 500)、E(>= 0)和K(0 < K <= V),分别是无向图的顶点数、边数、以及颜色数。顶点和颜色都从1到V编号。随后E行,每行给出一条边的两个端点的编号。在图的信息给出之后,给出了一个正整数N(<= 20),是待检查的颜色分配方案的个数。随后N行,每行顺次给出V个顶点的颜色(第i个数字表示第i个顶点的颜色),数字间以空格分隔。题目保证给定的无向图是合法的(即不存在自回路和重边)。

    输出格式:

    对每种颜色分配方案,如果是图着色问题的一个解则输出“Yes”,否则输出“No”,每句占一行。

    输入样例:
    6 8 3
    2 1
    1 3
    4 6
    2 5
    2 4
    5 4
    5 6
    3 6
    4
    1 2 3 3 1 2
    4 5 6 6 4 5
    1 2 3 4 5 6
    2 3 4 2 3 4
    
    输出样例:
    Yes
    Yes
    No
    No
    

    提交代码

    思路:先判涂点颜色是否等于K(题目要求一定要用k种颜色,<=k也是不行的)在暴力枚举每一条边盘颜色是否一样
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<queue>
    #include<algorithm>
    #include<cmath>
    #include<vector>
    #include<map>
    #include<set>
    #define inf 0x3f3f3f3f
    using namespace std;
    vector<int>v[505];
    set<int>s;
    int a[505];
    int main()
    {
        int n,m,k;
        cin>>n>>m>>k;
        for(int i=1;i<=m;i++)
        {
            int x,y;
            cin>>x>>y;
            v[x].push_back (y);
            v[y].push_back (x);
        }
        int p;
        cin>>p;
        while(p--)
        {
            int l=1;
            bool f=1;
            s.clear ();
            for(int i=1;i<=n;i++)
            {
                cin>>a[i];
                s.insert (a[i]);
            }
            if(s.size ()!=k) f=0;
            else
            {
                for(int i=1;i<=n;i++)
                {
                    for(int j=0;j<v[i].size ();j++)
                    {
                        if(a[i]==a[v[i].at(j)]) 
                        {
                            f=0;
                            break;
                        }
                    }
                    if(f==0) break;
                }
            }
            if(f) cout<<"Yes"<<endl;
            else cout<<"No"<<endl;
        }
    }
  • 相关阅读:
    记一次省赛总结
    护网杯一道密码学的感想
    配置phpstudy+phpstorm+xdebug环境
    python 模板注入
    hash扩展攻击本地实验
    kali rolling更新源之gpg和dirmngr问题
    web信息泄露注意事项
    ctf常见php弱类型分析
    文件上传小结
    ctf变量覆盖漏洞
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/13271075.html
Copyright © 2011-2022 走看看