フェルマーポイント図-1400。グラフ

2020年4月6日夜6時45分31秒

問題の説明:

連結グラフ無向非環式、X [i]は、Y 2つの頂点[Iによって各エッジが存在する ] 説明し、各辺の長さは、[i]はdで説明します。
このような点を求めてp、その結果、他の点pの最小距離と、そのような複数の点がある場合p、最も小さい番号が返されます。

サンプル

例1:

给出 x = `[1]`, y = `[2]`, d = `[3]`, 返回 `1`。
输入:
[1]
[2]
[3]
输出:
1

解释:
其他点到 1 的距离和为 3,其他点到 2 的距离和为 3,1 的编号较小。

サンプル2:

给出 x = `[1,2,2]`, y = `[2,3,4]`, d = `[1,1,1]`, 返回 `2`。
输入:
[1,2,2]
[2,3,4]
[1,1,1]
输出:
2

解释:
其他点到 1 的距离和为 5,其他点到 2 的距离和为 3,其他点到 3 的距离和为 5,其他点到 4 的距离和为 5。

注意事項

  • 2 <= n, d[i] <= 10^5
  • 1 <= x[i], y[i] <= n

問題解決:

パスや木などが、ここで右辺の値。

時間の複雑さ:O(n)は、

    地図<Integer型、セット<整数[] >>グラフ=新しいHashMapの<>(); 
    地図<整数、整数> CNT =新しいHashMapの<>(); 
    地図<整数、ロング>合計=新しいHashMapの<>(); 
    一覧<ロング[]>録音=新しいArrayListを<>(); 
    公共INT getFermatPoint(INT [] X、INT [] Y、INT [] D){ 
        ため(INT iが= 0; I <x.length; I ++){ 
            = X [i]とからINT。
            = Y [i]は、INT。
            W = D INT [i]は、
            もし(graph.containsKey()から!)graph.put(新しいHashSetの<>()、から)。
            もし(graph.containsKey()へ!)graph.put(新しいHashSetの<>()、へ)。
            graph.get(から)が(新しいINT [] {に、wは}).add。
            graph.get(TO)(新しいINT [] {W、からを}).add。
        DFS2(X [0]、-1)。 
    プライベートボイドDFS1(INT根、INT親){
        Collections.sort(レコード、(長い[] O1、長い[] O 2) - > O1 [0] == O 2 [0] Long.compare(O1 [1]、O [1]):Long.compare(O1 [0]は、O2 [0])); 
        リターン(INT)record.get(0)[1]。
    } 
    
    プライベートボイドDFS2(INT根、INT親){ 
        record.add(新しい長い[] {sum.get(根)、ルート})。
        (INT []次:graph.get(ルート))のために{ 
            (次の[0] ==親)が続けば、
            長い= W(長い)次の[1]。
            長いCURR = sum.get(ルート)+(ロング)(cnt.size() - cnt.get(次の[0])* 2)* W。
            sum.put(次の[0]、CURR)。
            DFS2(次の[0]、根)。
        } 
    }
    
        int型curr_cnt = 1; 
        長いcurr_sum = 0; 
        (INT []次:graph.get(ルート))のために{ 
            (次の[0] ==親)が続けば、
            DFS1(次の[0]、根)。
            curr_cnt + = cnt.get(次の[0])。
            curr_sum + = sum.get(次の[0])+(長い)次の[1] *(長い)cnt.get(次の[0])。
        } 
        cnt.put(根、curr_cnt)。
        sum.put(根、curr_sum)。
    }

  

 

おすすめ

転載: www.cnblogs.com/hyserendipity/p/12643576.html