PATクラス1106のサプライチェーンでの最低価格(25ポイント)(BFS)

サプライチェーンにおける1106年の最低価格(25分)
 

サプライヤーからの顧客に製品を移動に関わるすべての人 - サプライチェーンは、小売業者(小売店)、代理店(ディーラー)、およびサプライヤー(納入業者)のネットワークです。

1社のルートサプライヤー、価格の1のサプライヤからチェーンバイ製品の全員からスタート  P及び販売またはある価格でそれらを配布する  よりも、R%高い  P.のみの小売業者は、顧客に直面するだろう。サプライチェーンの各メンバーは、ルート業者以外は、正確に1つのサプライヤを有すると仮定される、およびNO供給サイクルは存在しません。

今、サプライチェーンを与え、あなたは、顧客は、いくつかの小売業者から期待できる最低価格を伝えることになっています。

入力仕様:

各入力ファイルには、1つのテストケースが含まれています。各場合について、最初の行は、3つの正の数値含ま  N(≤)、サプライチェーンのメンバの総数を(従ってそのIDは、0から番号付けされている  N - 1、ルート供給者のIDは0です) P、ルートサプライヤーによって与えられた価格。そして  Rは、各代理店または小売店の価格増加のパーセント率。次いで、  Nラインは、次のそれぞれは、次の形式で販売代理店または小売店について説明します。

K I ID [1] ID [2] ... ID [ K I ]

ここで  、i番目の行、  Kは、iが供給業者から製品を受け取る代理店または小売業者の総数であり  、Iは、次いで、IDのこれらディストリビュータまたは小売業者のが続きます。 Kのjは、0手段である  j番目のメンバーが小売業者です。行のすべての数字は、スペースで区切られます。

出力仕様:

各テストケースの場合、1行我々はいくつかの小売業者、小数点以下4桁までの精度アップから期待できる最低価格で印刷して、小売業者の数最低価格で販売います。二つの数値の間に1つのスペースがなければなりません。すべての価格を超えないことが保証されている  1。

サンプル入力:

10 1.80 1.00
3 2 3 5
1 9
1 4
1 7
0
2 6 1
1 8
0
0
0
 

サンプル出力:

1.8362 2

 

質問の意味:

サプライチェーンは、小売業、ディーラー、サプライヤー組成物から構成され、サプライヤーから始まる、商品の購入時に、サプライチェーンの誰もが、より多くのrより%の元の価格よりも支払う必要が、リングは、サプライチェーン上に存在しない、この質問が必要です顧客がために支払われた商品を購入するための最低コストを見つけて、既存のサプライチェーンの最安値番号を見つけます。

ソリューション:

BFS。最初のルートルートの浸透を見つけるためによります。ベクターとのパスを保存します。次は、深い深さの下にあるすべてのノードを記録し、BFS。ある最後に、すべての小売店を通じて、あなたは最小の深さを見つけることができます。それは最長パス、最も高価なの価格として始まりました。これは、最低価格でなければなりません。

ACコード:

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
ベクター < INT > V [ 100005 ]。
キュー < 整数 > Q;
ダブルP、R。
int型のn;
int型  [ 100005 ]。
INT深[ 100005 ]。
INT メイン(){ 
    CIN >> N >> P >> R。
    以下のためにINT iが= 0 ; N I <; I ++ ){
         int型のmは、
        cinを >> メートル。
        以下のためのint型J = 1 ; J <= Mであり、j ++ ){
             intはX; 
            cinを >> X; 
            V [i]は.push_back(X)。
             [X] ++ ; 
        } 
    } 
    int型のルート= - 1 INT iは= 0、I <N; I ++ ){
         場合、[I] == 0 ){ 
            ルート = I。
            休憩; 
        } 
    } 
    深さ[ルート] = 0 ; 
    q.push(ルート)。
    //裁判所未満<< "根" <<ルート<<てendl; 
    一方、(!q.empty()){
         int型のx = q.front()。
        q.pop(); 
        // COUT << "V [X] .size()" << V [X] .size()<< ENDL。
        以下のためにINT iが= 0 ; I <V [X] .size(); I ++ ){
             int型、Y = V [X] .AT(I)。
            深さ[Y] =深さ[X] + 1 
            q.push(Y)。
            // COUT << "到" << Y << "距离" <<深[Y] << ENDL。
        } 
    } 
    int型 MM = 100005 int型 NUM = 1 ;
    以下のためのint型iは= 0、I <N; I ++ ){
         場合(V [I] .size()== 0 ){
             場合(深さ[I] < MM){ 
                MM = 深さ[I]。
                NUM = 1 
            } そう であれば(深さ[I] == mm)でNUM ++ 
        } 
    } 
    のためにINT iは= 1 ; I <=ミリメートル; I ++ ){ 
        P = P×(1 + R * 0.01 )。
    } 
    のprintf(" %.4lf%D " 、P、NUM)。
    リターン 0 ;    
}

 

おすすめ

転載: www.cnblogs.com/caiyishuai/p/12241811.html