zoukankan      html  css  js  c++  java
  • 天梯赛 L2-023. 图着色问题

    题解:用dfs遍历图的每条边就好,这里注意要求颜色的个数为k

    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #include <queue>
    #include <map>
    #include <vector>
    #include <set>
    using namespace std;
    const int maxn=510;
    int v,e,k;
    vector<int> edge[maxn];
    int val[maxn];
    int vis[maxn];
    int flag;
    void dfs(int now,int fa)
    {
        if(flag==1) return ;
        int len=edge[now].size();
        for(int i=0;i<len;i++)
        {
            int next=edge[now][i];
            if(val[now] == val[next])
            {
                flag=1;
                return;
            }
            if(next != fa &&  vis[next] == 0 )
            {
                vis[next]=1;
                dfs(next,now);
            }
        }
    }
    int main()
    {
        scanf("%d %d %d",&v,&e,&k);
        for(int i=1;i<=e;i++)
        {
            int a,b;
            scanf("%d %d",&a,&b);
            edge[b].push_back(a);
            edge[a].push_back(b);
        }
        int q;
        cin>>q;
        while(q--)
        {
            set<int> st;
            memset(vis,0,sizeof(vis));
            flag=0;
            for(int i=1;i<=v;i++)
            {
                scanf("%d",&val[i]);
                st.insert(val[i]);
            }
            if(st.size() != k) cout<<"No"<<endl;
            else
            {
                for(int i=1;i<=v;i++)
                {
                    if(flag==1) break;
                    if(!vis[i]) 
                    {
                        vis[i]=1;
                        dfs(i,i);
                    }
                }
                if(flag==1) cout<<"No"<<endl;
                else cout<<"Yes"<<endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    C# 应用
    C# 基础
    C# 基础
    C# 基础
    vs
    C# 基础
    C# 基础
    C# 基础
    C# 基础
    C# 基础
  • 原文地址:https://www.cnblogs.com/z1141000271/p/8496806.html
Copyright © 2011-2022 走看看