zoukankan      html  css  js  c++  java
  • 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 ;
    }

  • 相关阅读:
    jQuery,from标签,歪路子小技巧
    UniApp随笔
    JS的一些操作
    文本环绕
    Dictionary 存储函数,方法
    GIT项目管理
    Vue2 学习记录
    VSCode + Vue 学习笔记
    Mysql,Insert,Select时自增长问题
    ASP.NET SignalR Troubeshooting
  • 原文地址:https://www.cnblogs.com/Christopher-Cao/p/5098644.html
Copyright © 2011-2022 走看看