Wannafly Camp 2020 Day 3C 无向图定向

请你把无向图的每条边确定一个方向,使之成为一个DAG,并且最小化最长路的长度。

#include <bits/stdc++.h>
using namespace std;

int n,m,t1,t2,color[20],cnt,g[20][20],ans=0x3f3f;

bool check(int p,int c) {
    int flag = 1;
    for(int i=1;i<=n;i++) {
        if(g[p][i] && color[i]==c) {
            flag = 0;
            break;
        }
    }
    return flag;
}

void dfs(int p) {
    if(cnt>=ans) return;
    if(p>n) {
        ans = min(ans, cnt);
    }
    else for(int i=1;i<=cnt+1;i++) {
        if(check(p,i)) {
            color[p]=i;
            if(i>cnt) {
                ++cnt;
                dfs(p+1);
                --cnt;
            }
            else {
                dfs(p+1);
            }
            color[p]=0;
        }
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin>>n>>m;
    for(int i=1;i<=m;i++) {
        cin>>t1>>t2;
        g[t1][t2]=g[t2][t1]=1;
    }
    dfs(1);
    cout<<ans-1<<endl;
}
原文地址:https://www.cnblogs.com/mollnn/p/12243242.html