zoukankan      html  css  js  c++  java
  • BZOJ1864[ZJOI2006]三色二叉树[树形DP]

    1864: [Zjoi2006]三色二叉树

    Time Limit: 1 Sec  Memory Limit: 64 MB
    Submit: 773  Solved: 548
    [Submit][Status][Discuss]

    Description

    Input

    仅有一行,不超过500000个字符,表示一个二叉树序列。

    Output

    输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色。

    Sample Input

    1122002010

    Sample Output

    5 2

    HINT

     

    Source

    Day1


    先建树

    d[i][0/1]表示以i为根的子树i绿色1其他0下最多几个点绿色 

    三个颜色转移就是父子三人两个其他一个绿色

    见代码

    /**************************************************************
        Problem: 1864
        User: thwfhk
        Language: C++
        Result: Accepted
        Time:68 ms
        Memory:13884 kb
    ****************************************************************/
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int N=5e5+5,INF=1e9;
    int n,mx=-INF,mn=INF;
    char s[N];
    struct node{
        int ls,rs;
        node():ls(0),rs(0){}
    }tree[N];
    int cnt=0,pos=1;
    int build(){
        int u=++cnt,num=s[pos]-'0';
        pos++;
        if(num>=1) tree[u].ls=build();
        if(num==2) tree[u].rs=build();
        return u;
    }
    int d[N][2],f[N][2];
    void dp(int u){//printf("dp %d
    ",u);
        if(u==0) return;
        int ls=tree[u].ls,rs=tree[u].rs;
        dp(ls);dp(rs);
        d[u][0]=max(d[ls][0]+d[rs][1],d[ls][1]+d[rs][0]);
        f[u][0]=min(f[ls][0]+f[rs][1],f[ls][1]+f[rs][0]);
        d[u][1]=d[ls][0]+d[rs][0]+1;
        f[u][1]=f[ls][0]+f[rs][0]+1;
    }
    int main(int argc, const char * argv[]) {
        scanf("%s",s+1);
        n=strlen(s+1);
        build();
        dp(1);
        mx=max(d[1][0],d[1][1]);
        mn=min(f[1][0],f[1][1]);
        printf("%d %d",mx,mn);
        return 0;
    }
  • 相关阅读:
    BIOS详解:什么是BIOS ?BIOS的作用?CMOS及其与BIOS的关系?
    随机数不随机
    解决hexo神烦的DTraceProviderBindings MODULE_NOT_FOUND
    保护模式特权级别DPL,RPL,CPL 之间的联系和区别
    Linux内核 hlist_head/hlist_node结构解析
    x86中的页表结构和页表项格式
    Linux下/proc目录简介
    bdev文件系统
    X86 IO端口和MMIO
    Mac OS Alfred 2 tips
  • 原文地址:https://www.cnblogs.com/candy99/p/5887203.html
Copyright © 2011-2022 走看看