1154 Vertex Coloring (25 分)

时间:2019-02-21
本文章向大家介绍1154 Vertex Coloring (25 分),主要包括1154 Vertex Coloring (25 分)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

问题描述:给一个无向图的顶点上色,使任意一条边的端点颜色不一样。

解题思路:记录边,然后判断每一条边的两个顶点,

AC代码:

/*1154 Vertex Coloring (25 分)19:10--19:44
 *图+集合的元素个数
 *&1,2,3:测试点2错误,&4:通过
 */
#include<iostream>
#include<algorithm>
#include<unordered_set>
using namespace std;
#define MAX 10005
typedef struct edg{
    int a,b;
}edg;
edg ed[MAX];
int co[MAX],M,N,K,i;
unordered_set<int>tag;
int main()
{
    freopen("test.txt","r",stdin);
    scanf("%d %d",&N,&M);
    for(i=0;i<M;++i)scanf("%d %d",&ed[i].a,&ed[i].b);//边的顶点
    scanf("%d",&K);
    while(K--){
        tag.clear();
        for(i=0;i<N;++i){
            scanf("%d",&co[i]);//颜色
            tag.insert(co[i]);//可以在输入颜色时即添加颜色种类
        }
        //if(!M)continue;//M不等于0
        for(i=0;i<M;++i){//注意M可能等于0,测试点2?????????????
            if(co[ed[i].a]==co[ed[i].b]){
                printf("No\n");
                break;
            }
        }
        if(i==M)printf("%d-coloring\n",tag.size());
    }
    return 0;
}