首页 > 其他 > 详细

树的最小支配集,最小点覆盖,最大独立集

时间:2019-07-27 16:41:15      阅读:121      评论:0      收藏:0      [点我收藏+]

(DFS+贪心)

DFS

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000;
int fa[maxn], vis[maxn], ord[maxn], tot;
int mm[maxn][maxn];
void dfs(int s){
    ord[tot++] = s;
    for(int i=1; i<=n; i++){
        if(mm[s][i] && !vis[i]){
            vis[s]=1;
            dfs(i);
            fa[i] = s;
        }
    }
}

最小支配集

int st[maxn]={0}, s[maxn]={0}, ans=0;
int greedy(){
    for(int i=n-1; i>=0; i--){
        int t = ord[i];
        if(!s[t]){
            if(!st[fa[t]]){
                st[fa[t]]=1;ans++;
            }
            s[t] = s[fa[t]] = s[fa[fa[t]]]=1;
        }
    }
    return ans;
}

最小点覆盖

int st[maxn]={0}, s[maxn]={0}, ans=0;
int greedy(){
    for(int i=n-1; i>=0; i--){
        int t = ord[i];
        if(!s[t] && !s[fa[t]]){
            ans++;
            st[fa[t]] = s[t] = st[fa[t]] = 1;
        }
    }
    return ans;
}

最大独立集

int st[maxn]={0}, s[maxn]={0}, ans=0;
int greedy(){
    for(int i=n-1; i>=0; i--){
        int t = ord[i];
        if(!s[t]){
            ans++;
            st[t] = s[t] = s[fa[t]] = 1;
        }
    }
    return ans;
}

 

树的最小支配集,最小点覆盖,最大独立集

原文:https://www.cnblogs.com/Kingpenguin/p/11255482.html

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