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

    给出一颗二叉树,用红绿蓝进行染色,要求二叉树三角形的颜色不同,求绿色节点的数目的最大最小值。

    给出树的方法比较特殊,因此直接递归即可,无须建图。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 char str[1000005];
     5 int pin;
     6 
     7 int sw(int a,int b,int c){
     8     if(c) return max(a,b);
     9     else return min(a,b);
    10 }
    11 
    12 pair<int,int> dfs(int k){
    13     pin++;
    14     if(str[pin-1]=='0') return make_pair(1,0);
    15     if(str[pin-1]=='1'){
    16         pair<int,int> nxt = dfs(k);
    17         return make_pair(nxt.second+1, sw(nxt.first,nxt.second,k));
    18     }
    19     if(str[pin-1]=='2'){
    20         pair<int,int> cl = dfs(k);
    21         pair<int,int> cr = dfs(k);
    22         return make_pair(cl.second+cr.second+1, sw(cl.first+cr.second, cl.second+cr.first,k));
    23     }
    24 }                
    25 
    26 int main(){
    27     scanf("%s",&str);
    28     pair<int,int> result=dfs(1);
    29     printf("%d ",max(result.first, result.second));
    30     pin=0; result=dfs(0);
    31     printf("%d
    ",min(result.first, result.second));
    32 }
  • 相关阅读:
    CSS外边距的合并
    四大主流浏览器内核
    ViewPort视口
    url、src、href定义以及使用区别
    Debug和Release区别
    基线概念
    浅谈C#循环控制流程语句(web前端基础)
    With you With me
    css元素内容基础
    年轻人有梦想,老人有回忆
  • 原文地址:https://www.cnblogs.com/mollnn/p/8284302.html
Copyright © 2011-2022 走看看