• 1154 Vertex Coloring (25 分)


    染色法判断是否为(k)染色图,需要一个(vis)数组防止走环路。

    const int N=10010;
    vector<int> g[N];
    bool vis[N];
    int color[N];
    int n,m,q;
    
    bool dfs(int u)
    {
        vis[u]=true;
        for(int i=0;i<g[u].size();i++)
        {
            int j=g[u][i];
            if(color[j] == color[u]) return false;
            else if(!vis[j])
            {
                if(!dfs[j]) return false;
            }
        }
        return true;
    }
    
    int main()
    {
        cin>>n>>m;
    
        while(m--)
        {
            int a,b;
            cin>>a>>b;
            g[a].pb(b);
            g[b].pb(a);
        }
    
        cin>>q;
        while(q--)
        {
            memset(vis,0,sizeof vis);
            
            set<int> S;
            for(int i=0;i<n;i++)
            {
                cin>>color[i];
                S.insert(color[i]);
            }
    
            bool ok=true;
            for(int i=0;i<n;i++)
                if(!vis[i])
                {
                    if(!dfs(i))
                    {
                        ok=false;
                        break;
                    }
                }
            
            if(ok)
                cout<<S.size()<<"-coloring"<<endl;
            else
                puts("No");
        }
        //system("pause");
        return 0;
    }
    

    也可直接枚举每条边。

    const int N=10010;
    PII e[N];
    int color[N];
    int n,m,q;
    
    int main()
    {
        cin>>n>>m;
    
        for(int i=0;i<m;i++)
            cin>>e[i].fi>>e[i].se;
    
        cin>>q;
        while(q--)
        {
            unordered_set<int> S;
            for(int i=0;i<n;i++)
            {
                cin>>color[i];
                S.insert(color[i]);
            }
    
            bool ok=true;
            for(int i=0;i<m;i++)
            {
                int a=e[i].fi,b=e[i].se;
                if(color[a] == color[b])
                {
                    ok=false;
                    break;
                }
            }
    
            if(ok) cout<<S.size()<<"-coloring"<<endl;
            else puts("No");
        }
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    怎么安装Python?
    Ramnit蠕虫病毒分析和查杀
    Exphub[漏洞利用脚本库]
    SMBv3远程代码执行漏洞复现(CVE-2020-0796)
    Tomcat AJP 文件包含漏洞复现(CVE-2020-1938)
    Fastjson远程代码执行漏洞复现
    信息收集之——旁站、C段
    Redis未授权访问漏洞复现与利用
    CSS
    MVC控制器路由
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14519033.html
Copyright © 2020-2023  润新知