[POJ - 2139] Cowvinベーコン(最短パスのフロイドのアルゴリズム)の6度

Cowvinベーコンの6度

説明

Mathクラス、WNJXYKは突然、我々は計算を定量化するために他の皆に平均距離に人を使用し、また人気が定量化することができました。

ここで定義された人々の間の距離:
1.自分自身の距離0と
2. AとBは同じ小さなグループに属している場合は、それらの間の距離が1で
AとBは、小グループ、Bにある場合は3 Cは小グループに属し、AおよびCは、異なるグループに属する小、距離AおよびCは2である(B介して接点C、C二人)
4など

クラスは、N個の個々の(2 <= N <= 300)、M(1 <= M <= 10000)の合計の小グループとの関係を有しています。さて、あなたはクラスに小さなグループを与えるすべての情報は、他の人の平均距離に、あなたのクラスの人気最高の人に尋ねます。(あなたは出力に100回の平均距離が必要)

入力

入力2つの証明書N、Mの最初の行
各行の先頭に次の行のM + 1は、次の整数Kは、小グループの学生の数を表し、Kは小さなグループサイズを提示整数を表します。

出力

出力ライン:100 *最小の平均距離(floatとdoubleの計算プログラムを使用していない、和を宣告することができます)

サンプル入力

4 2
3 1 2 3
2 3 4

サンプル出力

100

トピックリンク

https://vjudge.net/problem/POJ-2139

 

最短経路問題は、人毎に2人の間の距離を計算し、隣接する点群1との間の距離、及びその後フロイドのアルゴリズムはできる限り

フロイドのアルゴリズムは、詳細な  https://www.cnblogs.com/sky-stars/p/11204139.html

 

ACコード

#include <iostreamの> 
する#include <cstdioを> 
する#include <fstreamの> 
する#include <アルゴリズム> 
の#include <cmath> 
の#include <両端キュー> 
の#include <ベクトル> 
の#include <キュー> 
の#include < ストリング > 1つ
の#include <CStringの> 
の#include <地図> 
の#include <スタック> 
の#include < 設定 > 
の#include <sstream提供>
 の#define IOS ios_base :: sync_with_stdio(0)。CIN。
LL長い長
 の#define 0x3f3f3f3f INF
 の#define MEM(X、Y)のmemset(X、Y、はsizeof(X))
 の#define MAXN 300 + 5
 の#define P対<整数、整数>
 使用して 名前空間STDを、
INTのN、M、X。
INT D [MAXN] [MAXN]。
無効)(INITを
{ 
    // 初始化iは、j個の的を距离到为无穷大
    ためint型 i = 1 ; iがn = <I ++ のためのINT J = 1 ; J <= nであり、j ++ 
        { 
            場合(I == J)// 自己 
                D [i]は[J] = D [j]は[I] = 0;
            他の
                D [i]は[J] = D [j]と[I] = INF。
        } 
} 
int型のmain()
{ 
    CIN >> N >> M。
    その中に(); // 初始化
    一方(M-- 
    { 
        CIN >> X。
        INT [MAXN] B。// 暂时存一下人
        のためにint型 i = 0 ; I <X、iは++ 
            CIN >> のb [i]は、
        以下のためにint型私は= 0 ;私は、x < 1を、私は++)//。各2の1の距離
            のためにINT J =私は+ 1、J <X; J ++ 
                D [B [I] [B [J] = D [B [J] [B [I] = 1 ; 
    } 
    // 最短経路を見つけるためのフロイドのアルゴリズム
    のためのint型 = K 1、K <= N; K ++ のためのINT I = 1 ; I <= N; I ++ のためのINT J = 1。 ; J <= N- ; J ++ 
                D [I] [J] =分(D [I]、[J]、D [I] [K] + D [K] [J]);
     int型 ANS = INF;
     のためのINTI = 1 ; I <= N。私は++)// 枚举每个人
    {
         int型の合計= 0 ;
        INT J = 1 ; J <= N; J ++ 
            合計 + = D [i]は[J]。
        ANS =分(ANS、100 *の和/(N- 1 ))。
    } 
    COUT << ANS << ENDL。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/sky-stars/p/11346995.html