zoukankan      html  css  js  c++  java
  • bzoj2060[Usaco2010 Nov]Visiting Cows 拜访奶牛*

    bzoj2060[Usaco2010 Nov]Visiting Cows 拜访奶牛

    题意:

    给棵树,要求如果取了某个节点就不能取与它相邻的节点,问最多可取几个节点。树的大小≤50000。

    题解:

    树形dp。令f[i][0]不取i节点,f[i][1]为取i节点,则方程为f[i][0]=sum(max(f[j][0],f[j][1]+1)),f[i][1]=sum(f[j][0]),j为i的子节点。最后答案为max(f[1][0],f[1][1]+1)。注意不要漏了那个“+1”。

    代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #define inc(i,j,k) for(int i=j;i<=k;i++)
     5 #define maxn 50010
     6 using namespace std;
     7 
     8 inline int read(){
     9     char ch=getchar(); int f=1,x=0;
    10     while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}
    11     while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    12     return f*x;
    13 }
    14 struct e{int t,n;}es[maxn*2]; int g[maxn],ess,n,dp[maxn][2];
    15 void pe(int f,int t){es[++ess]=(e){t,g[f]}; g[f]=ess; es[++ess]=(e){f,g[t]}; g[t]=ess;}
    16 void dfs(int x,int fa){
    17     dp[x][0]=dp[x][1]=0;
    18     for(int i=g[x];i;i=es[i].n)if(es[i].t!=fa){
    19         dfs(es[i].t,x); dp[x][0]+=max(dp[es[i].t][1]+1,dp[es[i].t][0]); dp[x][1]+=dp[es[i].t][0];
    20     }
    21 }
    22 int main(){
    23     n=read(); inc(i,1,n-1){int a=read(),b=read(); pe(a,b);} dfs(1,0);
    24     printf("%d",max(dp[1][0],dp[1][1]+1)); return 0;
    25 }

    20160907

  • 相关阅读:
    vue 初始化项目模板报错
    092117-6265-01.dmp 蓝屏日志文件
    电信流氓注入JS
    DISM
    node.js
    Adobe ZXPInstaller 报错 Installation failed because of a file operation error.
    Microsoft Edge 针对 Web 开发人员更新日志
    What's new in Safari 11.0
    CSS Filter
    accept-language
  • 原文地址:https://www.cnblogs.com/YuanZiming/p/5861985.html
Copyright © 2011-2022 走看看