• codevs1796-最小完全图


    表示第一篇就是水题。

    根据Prim的思想,我们可以证明:dis ( a , b ) > max { a b 最小生成树路径上的边权 }

    把所有边sort一遍用并查集维护就可以了

    #include<cstdio>
    #include<algorithm>
    using namespace std ;

    long long ANS = 0 ;

    struct edge {
        int a , b ;
        int dis ;
    } ;

    const int MAXN = 100000 ;
    edge E [ MAXN ] ;

    struct cmp {
        bool operator () ( const edge & a , const edge & b ) { return a . dis < b . dis ; } ;
    } ;

    int pa [ MAXN ] ;
    int size [ MAXN ] ;

    int find ( const int p ) { return pa [ p ] == p ? p : pa [ p ] = find ( pa [ p ] ) ; }

    void Union ( int a , int b ) {
        if ( size [ a ] < size [ b ] ) swap ( a , b ) ;
        pa [ b ] = a ; size [ a ] += size [ b ] ;
    }

    int N ;
    int main () {
        scanf ( "%d" , & N ) ;
        for ( int i = 1 ; i < N ; ++ i )
            scanf ( "%d%d%d" , & E [ i ] . a , & E [ i ] . b , & E [ i ] . dis ) ;
        sort ( E + 1 , E + N , cmp () ) ;
        for ( int i = 1 ; i <= N ; ++ i ) {
            pa [ i ] = i ;
            size [ i ] = 1 ;
        }
        for ( int i = 1 ; i < N ; ++ i ) {
            const int a = find ( E [ i ] . a ) ;
            const int b = find ( E [ i ] . b ) ;
            const int dis = E [ i ] . dis ;
            ANS += ( long long ) size [ a ] * size [ b ] * ( dis + 1 ) - 1 ;
            Union ( a , b ) ;
        }
        printf ( "%lld " , ANS ) ;
        return 0 ;
    }

  • 相关阅读:
    导出htmlcleaner
    备份
    本地win7搭建SVN
    nutch 导入ecl
    linux 启动nutch
    c++中的构造函数前加上explicit
    string::erase的使用心得
    C++的static关键字(转载)
    Boot Trigger
    strtol()详解
  • 原文地址:https://www.cnblogs.com/Christopher-Cao/p/5098644.html
Copyright © 2020-2023  润新知