• 洛谷P1268 树的重量



    因为所有的节点都是叶节点,因此每个叶节点都是从已有的节点中分出来的

    而每个节点都可以从 1 ~ j (j < i ) 中分出 (当然类似于floyd三层循环枚举也可以)

    设i为要插入的节点 , j为dis[1][j] 中最小的那个(j<i)

    minn = min ( (dis[1][i]+dis[j][i] - dis[1][j])/2 ) ;
    

    floyd的话是

    for ( int i = 3;i <= n; ++i ) {
                int minn = 999999999 ;
                for ( int j = 1; j <= i - 1; ++j )
                  for ( int k = 1; k <= j - 1; ++k ) {
                     minn = min ( minn, ( dis[j][i] + dis[k][i] - dis[j][k] ) / 2 );
               }
               ans += minn;
          }
    

    其中i为要插入的节点,j为枚举的起点1,k位枚举的起点2,jk就是要分的线段

    code

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #define maxn 100
    using namespace std ;
    int n , a[maxn][maxn] , ans , minn ;
    int main () {
    	while(cin >> n ) {
    		if(n == 0) return  0 ;
     		ans = 0 ;
    		for(int i = 1 ; i < n ; i ++) {
    			for(int j = i + 1 ; j  <= n ; j ++) {
    				cin >> a[i][j] ;
    			}
    		}
    		ans = a[1][2] ;
    		for(int i = 3 ; i <= n ; i ++) {
    			int minn = 999999 ;
    			for(int j = 2 ; j < i ; j ++) {
    				minn = min(minn,(a[1][i]+a[j][i]-a[1][j])/2) ;
    			}
    			ans += minn ;
    		}
    		cout << ans << endl ;
    	}
    	return 0 ;
    }
    
  • 相关阅读:
    POJ 3468_A Simple Problem with Integers(树状数组)
    POJ 3468_A Simple Problem with Integers(线段树)
    ZOJ 2770_Burn the Linked Camp
    ZOJ 2770_Burn the Linked Camp
    POJ 3169_Layout
    POJ 3169_Layout
    POJ 3684_Physics Experiment
    POJ 3255_Roadblocks
    POJ 3723 Conscription【最小生成树】
    POJ 3279 Fliptile【枚举】
  • 原文地址:https://www.cnblogs.com/lyt020321/p/11348204.html
Copyright © 2020-2023  润新知