zoukankan      html  css  js  c++  java
  • C 无向图定向

    题:https://ac.nowcoder.com/acm/contest/4114/C

    题意:给定无向图定向,使之成为定向图同时使最长路最短

    分析:狄尔沃斯定理。给n个点染色,要求最后图相邻点颜色不能相同,然后编号小的向编号的大走,那么最长路就是颜色种类-1,用dfs求出最小染色数

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define pb push_back
    #define MP make_pair
    #define pil pair<int,ll>
    const int inf=0x3f3f3f3f;
    const ll INF=1e18;
    const int M=20;
    vector<int>g[M];
    int col[M],ans,m,n;
    bool check(int u,int i){
        for(auto v:g[u])
            if(col[v]==i)
                return 0;
        return 1;
    }
    void dfs(int u,int sum){
        if(u==n+1){
            ans=min(ans,sum);
            return ;
        }
        if(sum>ans)
            return ;
        for(int i=1;i<=sum+1;i++){
            if(!check(u,i))
                continue;
            col[u]=i;
            if(i==sum+1){
                dfs(u+1,sum+1);
            }
            else dfs(u+1,sum);
            col[u]=0;
        }
    }
    int main(){
        scanf("%d%d",&n,&m);
        ans=n;
        for(int u,v,i=1;i<=m;i++){
            scanf("%d%d",&u,&v);
            g[u].pb(v);
            g[v].pb(u);
        }
        dfs(1,0);
        printf("%d",ans-1);
        return 0;
    }
    View Code
  • 相关阅读:
    sed
    UCOSIII(二)
    UCOSIII(一)
    IIC
    SPI
    vii
    find
    grep
    Scrum项目4.0
    Scrum项目3.0
  • 原文地址:https://www.cnblogs.com/starve/p/13613242.html
Copyright © 2011-2022 走看看