zoukankan      html  css  js  c++  java
  • 树上的最大独立集

    最大独立集问题是指对于一棵n个结点的无根树,选出尽量多的结点,使得任何两个结点均不相邻,解答过程详见入门经典第二版280页,粘代码跑QAQ

     1 #include "iostream"
     2 #include "cstdio"
     3 #include "cstring"
     4 #include "string"
     5 #include "vector"
     6 using namespace std;
     7 const int maxn=1000+10;
     8 int n;
     9 vector<int> g[maxn];
    10 int son[maxn],gson[maxn];
    11 int f[maxn],dp[maxn],wide[maxn];
    12 int wide_max;
    13 void init(){
    14     scanf("%d",&n);
    15     for(int i=1;i<n;i++){
    16         int x,y;
    17         scanf("%d%d",&x,&y);
    18         g[x].push_back(y);
    19         g[y].push_back(x);
    20     }
    21 }
    22 void dfs(int v,int fa){
    23     int d=g[v].size();
    24     if(fa==-1)
    25         wide[v]=0;
    26     else
    27         wide[v]=wide[fa]+1;
    28     if(wide[v]>wide_max)
    29         wide_max=wide[v];
    30     for(int i=0;i<d;i++){
    31         int k=g[v][i];
    32         if(k!=fa)
    33             dfs(k,f[k]=v);
    34     }
    35 }
    36 int treedp(int root){
    37     f[root]=-1;
    38     wide_max=-1;
    39     dfs(root,-1);
    40     for(int i=wide_max;i>=0;i--){
    41         for(int j=1;j<=n;j++){
    42             if(wide[j]==i){
    43                 dp[j]=max(son[j],gson[j]+1);
    44                 if(i>=1)
    45                     son[f[j]]+=dp[j];
    46                 if(i>=2)
    47                     gson[f[f[j]]]+=dp[j];
    48             }
    49         }
    50     }
    51     return dp[root];
    52 }
    53 int solve(){
    54     int ans=0;
    55     for(int i=1;i<=n;i++){
    56         memset(son,0,sizeof(son));
    57         memset(gson,0,sizeof(gson));
    58         ans=max(ans,treedp(i));
    59     }
    60     return ans;
    61 }
    62 int main()
    63 {
    64     init();
    65     int ans=solve();
    66     printf("%d
    ",ans);
    67     return 0;
    68 }
    View Code
  • 相关阅读:
    运算符的一些运用规则
    “?:”练习(24小时计时转换12小时计时)
    if条件语句练习(相亲)
    练习
    理解PHP 依赖注入|Laravel IoC容器
    yiibooster+bsie
    PHP dirname() 函数 __FILE__ __DIR__
    per-project basis
    Setting composer minimum stability for your application
    修改mysql的root密码
  • 原文地址:https://www.cnblogs.com/wolf940509/p/7337073.html
Copyright © 2011-2022 走看看