BZOJ-2783: [JLOI2012]树

作者: AmadeusChan | 来源:发表于2018-11-13 12:17 被阅读0次

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2783

赤裸裸的水题,DFS一遍SET维护即可。

代码:

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <set>
 
using namespace std ;
 
#define ll long long
#define MAXN 100100
 
struct node {
    int k , cnt ;
    node(  ) {
        cnt = 0 ;
    }
    node( int _k , int _cnt ) : k( _k ) , cnt( _cnt ) {
         
    }
    bool operator < ( const node &a ) const {
        return k < a.k ;
    }
    bool operator == ( const node &a ) const {
        return k == a.k ;
    }
    bool operator > ( const node &a ) const {
        return k > a.k ;
    }
};
set < node > bst ;
 
struct edge {
    edge *next ;
    int t ;
} *head[ MAXN ] ;
 
void AddEdge( int s , int t ) {
    edge *p = new( edge ) ;
    p -> t = t , p -> next = head[ s ] ;
    head[ s ] = p ;
}
 
int n , len , w[ MAXN ] , roof ;
bool f[ MAXN ] ; 
ll ans = 0 ;
 
void dfs( int v , int sum ) {
    sum += w[ v ] ;
    set < node > :: iterator i = bst.find( node( sum - len , 0 ) ) ;
    if ( i != bst.end(  ) ) ans += ( ll )( i -> cnt ) ;
    i = bst.find( node( sum , 0 ) ) ;
    if ( i == bst.end(  ) ) bst.insert( node( sum , 1 ) ) ; else {
        node ret = *i ;
        bst.erase( i ) ;
        bst.insert( ret ) ;
    }
    for ( edge *p = head[ v ] ; p ; p = p -> next ) {
        dfs( p -> t , sum ) ;
    }
    i = bst.find( node( sum , 0 ) ) ;
    if ( i -> cnt == 1 ) bst.erase( i ) ; else {
        node ret = *i ;
        -- ret.cnt ;
        bst.erase( i ) ;
        bst.insert( ret ) ;
    }
}
 
int main(  ) {
    scanf( "%d%d" , &n , &len ) ;
    for ( int i = 0 ; i ++ < n ; ) scanf( "%d" , w + i ) ;
    memset( f , true , sizeof( f ) ) ;
    for ( int i = 1 ; i < n ; ++ i ) {
        int s , t ; scanf( "%d%d" , &s , &t ) ;
        AddEdge( s , t ) , f[ t ] = false ;
    }
    for ( int i = 0 ; i ++ < n ; ) if ( f[ i ] ) roof = i ;
    bst.clear(  ) ;
    bst.insert( node( 0 , 1 ) ) ;
    dfs( roof , 0 ) ;
    printf( "%lld\n" , ans ) ;
    return 0 ;
}

相关文章

  • BZOJ-2783: [JLOI2012]树

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2783 赤...

  • 水彩过程 | 树树树树

    练习了一下树的画法,用毛笔勾树干,扇形笔画树叶还是又快又方便的。因为不是写实风格,只要把树的意象画出来就可以,所以...

  • 树·树

    ​如果有来生,要做一棵树,站成永恒,没有悲欢姿势,一半在尘土里安详。一半在风里飞扬,一半洒落阴凉,一半沐浴阳光。 ...

  • 树,树……

    树,树…… ——洛尔迦 树,树, 枯了又绿。 脸蛋美丽的姑娘 在那里摘橄榄。 风,塔楼上的求爱者, 拦腰把她...

  • 橄榄树树树

    在建班级群的时候,我顺手打了三个树——橄榄树树树。是的,这是橄榄树第三次起航。 第一次,在北京,我说,我愿意在无人...

  • 树,与树

    (第一次学着简书里文友看图写诗,2020的图,各位讲究着看吧) 文/三少爷的糖 一颗树站在山头 遥望着远方,朦胧中...

  • 树,与树

    我不是一个很喜欢女生哭闹的人。 哭闹,意味着理智被情感摧毁。 理智没了,沟通渠道也就关闭了。 没有了沟通,剩下的就...

  • 树和树

    我的家门前有一棵柏树,不是什么稀罕的树,但它却挺直腰杆儿,坚定的伫立在我家门前,望着远方,似乎在等什么人又不像在等...

  • 树树秋声

    余秋雨说:生命,是一树花开,或安静或热烈,或寂寞或璀璨。日子,就在岁月的年轮中渐次厚重,那些天真的、跃动的、抑或沉...

  • 短篇‖树树

    这是一条幽静的古道,两旁尽是残垣断壁,竟也有一些台阶通向几栋还算有顶篷的石质的建筑物。我和我的伙伴着级上了一段...

网友评论

    本文标题:BZOJ-2783: [JLOI2012]树

    本文链接:https://www.haomeiwen.com/subject/lgwkfqtx.html