• 1154 Vertex Coloring


    A proper vertex coloring is a labeling of the graph's vertices with colors such that no two vertices sharing the same edge have the same color. A coloring using at most k colors is called a (proper) k-coloring.

    Now you are supposed to tell if a given coloring is a proper k-coloring.

    Input Specification:

    Each input file contains one test case. For each case, the first line gives two positive integers N and M (both no more than 1), being the total numbers of vertices and edges, respectively. Then M lines follow, each describes an edge by giving the indices (from 0 to N−1) of the two ends of the edge.

    After the graph, a positive integer K (≤ 100) is given, which is the number of colorings you are supposed to check. Then K lines follow, each contains N colors which are represented by non-negative integers in the range of int. The i-th color is the color of the i-th vertex.

    Output Specification:

    For each coloring, print in a line k-coloring if it is a proper k-coloring for some positive k, or No if not.

    Sample Input:

    10 11
    8 7
    6 8
    4 5
    8 4
    8 1
    1 2
    1 4
    9 8
    9 1
    1 0
    2 4
    4
    0 1 0 1 4 1 0 1 3 0
    0 1 0 1 4 1 0 1 0 0
    8 1 0 1 4 1 0 5 3 0
    1 2 3 4 5 6 7 8 8 9
    
     

    Sample Output:

    4-coloring
    No
    6-coloring
    No

    题意:

    给出相邻的两个顶点的编号,然后再给出每个方块的颜色,判断相邻的顶点的颜色是否相同,如果不同则计算不同颜色的种类。

    思路:

    先存下来相邻的顶点,然后将每个定点的颜色存入一个数组中,最后遍历存下的相邻的顶点,判断相邻的顶点颜色是否相同。用一个set存放颜色的种类。

    Code:

    #include<iostream>
    #include<vector>
    #include<set>
    #include<map>
    
    using namespace std;
    
    int main() {
        int n, m, c;
        cin >> n >> m;
        vector<pair<int, int> > v;
        int v1, v2;
        for (int i = 0; i < m; ++i) {
            cin >> v1 >> v2;
            v.push_back({v1, v2});
        }
        set<int> s;
        vector<int> color;
        int k;
        cin >> k;
        for (int i = 0; i < k; ++i) {
            s.clear();
            color.clear();
            for (int j = 0; j < n; ++j) {
                cin >> c;
                color.push_back(c);
                s.insert(c);            
            }
            for (int j = 0; j < v.size(); ++j) {
                v1 = v[j].first;
                v2 = v[j].second;
                if (color[v1] == color[v2]) {
                    cout << "No" << endl;
                    break;
                }
                if (j == v.size()-1) {
                    cout << s.size() << "-coloring" << endl;
                }
            }
        }
        return 0;
    }
    

      

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    [PHP] 小数转科学计数法, 小数保留 n 位
    [Blockchain] Cosmos Starport 101
    [Blockchain] Cosmos Starport 地址前缀的变更方式
    [Blockchain] Cosmos Starport 安装的三种方式
    [ML] 机器学习的 7 步走
    [FAQ] MEMORY ALLOC FAILED: mmap with HUGETLB failed, attempting without it (you should fix your kernel)
    [FAQ] FastAdmin epay 微信公众号支付 JSAPI 支付必须传 openid ?
    [TP5] 动态绑定指定默认模块, 解决: 控制器不存在:appindexcontrollerApi
    [TP5] ThinkPHP 默认模块和单模块的设置方式
    [TP5] 浅谈 ThinkPHP 的 Hook 行为事件及监听执行
  • 原文地址:https://www.cnblogs.com/h-hkai/p/12653230.html
Copyright © 2020-2023  润新知