首页 > 其他 > 详细

C 无向图定向

时间:2020-09-04 15:10:47      阅读:69      评论:0      收藏:0      [点我收藏+]

题: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

 

C 无向图定向

原文:https://www.cnblogs.com/starve/p/13613242.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!