7-8ハリー・ポッターの検査(25ポイント)
試験へのハリーポッターは、彼はあなたの助けを必要とします。研究のこのコースは、他の動物への動物の能力の呪いです。たとえば、猫はマウスは呪いがそうで笑魚であるとなると、マウスの呪いが笑ですとなります。呪いの反対方向への変化は、たとえば、それは猫にAHAHマウスすることができ、単に上下逆さまに読んで、元の呪文です。また、あなたが猫の魚になりたい場合は、直接の呪いのラララを読むことができます、あなたも猫のマウスを変更することができ、ラットの魚はなっても、それは読んでスペル:hahahehe。
ハリー・ポッターの手は今、すべての呪いを一覧表示し、変形した動物になることができ教科書を持っています。先生は彼が診察室に動物を持ち込むことはでき、彼はどんな動物に指定スキルになるために勉強するために動物を置きます。そこで彼は、あなたを求める:動物の種類を変更することが最も困難にするためにどのような動物をもたらすことができる(すなわち、動物はハリー・ポッターの最長の呪文が必要で、自分の動物を持参となります)呪いの最小値を必要としますか?たとえば:;少なくとも6と猫がで行く場合は、あなたが読む必要がネコ、ラット、魚だけならば、他の2匹の動物にマウスが4羽のしか文字を読む必要があるので、ハリーポッターがマウスを使って行くべきであることは明らかです猫の魚になるための文字は、同様に、タコが最良の選択ではありません行きます。
入力フォーマット:
入力説明:行1は、2つの正の整数N(≦100)、Nは試験に関与する動物の総数Mを示し、Mは、直接変形個数スペルれます。簡単にするために、私たちは動物の1〜Nの番号を押します。次いで、各ラインは、それぞれ、3つの正の整数で指定されたMラインは、2匹の動物の数、およびそれらの間に必要な変形長は(≦100)スペル、数字間のスペースで区切られました。
出力フォーマット:
出力ハリー・ポッターは、スペースで区切られた検査室の動物の長さの数だけでなく、変形の最も長い呪文を、持参してください。唯一のバンドが不可能動物すべての修正が必要な場合は、0が出力されます。あなたは動物の数を代替することができますしている場合、鳥は出力の最小数です。
サンプル入力:
6 11
3 4 70
1 2 1
5 4 50
2 6 50
5 6 60
1 3 70
4 6 60
3 6 80
5 1 100
2 4 60
5 2 80
出力例:
4 70
#include<iostream>
using namespace std;
int main() {
int n, m, a, b, c;
const int MAX = 101;
int map[MAX][MAX], index = 0, minLen = MAX, max = 0;
cin >> n >> m;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
map[i][j] = MAX;
for (int i = 0; i < m; ++i) {
cin >> a >> b >> c;
map[a][b] = map[b][a] = c;
}
for (int k = 1; k <= n; ++k)
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
if (i!=j&&map[i][k] + map[k][j] < map[i][j])
map[i][j] = map[i][k] + map[k][j];
for (int i = 1; i <= n; ++i) {
max = 0;
for (int j = 1; j <= n; ++j) {
if (i!=j&&map[i][j] > max)
max = map[i][j];
}
if (max < minLen)
index = i, minLen = max;
}
if (index == 0)
cout << 0 << endl;
else
cout << index << " " << minLen;
return 0;
}