397 [USACO Oct09】熱波
★☆入力ファイル:heatwvx.in
出力ファイル:heatwvx.out
の単純な比較
制限時間:1秒メモリ制限:128メガバイト
この夏の暑さから苦しんでいる人のテキサスシンプルさが巨大な波!!!彼らのテキサスロングホーンズはおいしいが、彼らはクリーム濃縮乳製品を生産するのは非常に良いものではありません。この時点でファーマージョンは、世界初の心配と精神に音楽を楽しむために世界の後、心配、人々は熱に耐える和らげるためにテキサス州、テキサス州への輸送の冷たいミルク栄養タスクを大量に取るためにリードを取るために痛み。
FJはミルクがテキサス州のラインにウィスコンシン州から輸送することができる研究しています。最初の経路は、好都合Tに1を標識し、T(1 <= T <= 2,500)町の合計後に開始および終了含みます 各フィールドの開始と終了に加えて接地少なくとも2つの他の町に町を接続する2つの双方向の道路から成ります。それぞれ、(燃料費、通行料などを含む)を介して、道路のコストを持っています。
7つの町があり、このマップを考えてみましょう。図5は、図4は、町の終わりで、町の牛乳である(括弧内の数字は、手数料の方法によるものです)。
[1] ---- 1 --- [3] - / \ [3] --- 6 --- [4] --- 3 - [3] - 4 / / / | 5 - [3] - - [2] - | \ / / | [5] --- 7 --- [2] - 2 --- [3] --- | / [1] ------
総経路後= 10 5-6-3-4 3(5> 6)+ 4(6> 3)+ 3(> 4 3)コストがかかります。
C(1 <= C <= 6,200)を含むマップは、直接道路区間2町に接続されている与えられました。道路によって各道路
開始地点Rs、終了地点Re(1 <= Rsの<= T 1 <=再<= T)、およびコスト(1 <= CI <= 1,000)群
パーセント。町TE(1 <= Teの<= T)最小トータルコストの終わりに都市TS(1 <= Tsと<= T)から出発して求めます。
トピック名:heatwv
入力フォーマット:
*最初のライン:T、C、TS、TEはスペースで区切られた4つの整数
最初の行I + 1、i番目のパスが記述されている:最初の行に2 * C + 1。ルピー、Re及びCI:スペースで区切られた3つの整数があります。
サンプル入力(ファイルheatwv.in):
7 11 5 4
2 4 2
1 4 3
7 2 2
3 4 3
5 7 5
7 3 3
6 1
6 3 4
2 4 3
5 6 3
7 2 1
詳細を入力します。
対象の記述と一致し、地図。
出力フォーマット:
*最初の行:テにTsと表される単一の整数の長さが最短です。それは?どのように突然、簡単な(ない費用
- 翻訳者注)データは、少なくとも1つの道路があることを確認します。
サンプル出力(ファイルheatwv.out):
7
出力の詳細:
5-> 6> 1-> 4(3 + 1 + 3)
さて、私は本当に忠実なファンああダイクストラ
退廃的な人々は、ああ、なぜ伝統のこの問題に関する質問に直面していますか?苦情!
質問は、単純な美貌がダイクストラはその後、ラインああDISの出力終了(ジー突然水の問題を発見した)を再度実行しているようです
チャレンジ5分、AC
成功!
注意:これは、双方向の側です
#include <ビット/ STDC ++ H>
の#define PA対<整数、整数>
の#define MAXN 2505
使って 名前空間STD。
INTのN、M、S、T。
ベクター < INT > V [MAXN]、[MAXN] W。
int型VIS [MAXN]、[MAXN] DIS;
PRIORITY_QUEUE <PA、ベクトル<PA>、大きな<PA>> Q。
ボイドダイクストラ()
{
memsetの(DIS、0x3fを、はsizeof (DIS))。
DIS [S] = 0 ;
q.push(make_pair(0 、S))。
しばらく(!q.empty())
{
int型のx =q.top()は、第2。
q.pop();
もし(VIS [X])
続けます。
VIS [X] = 1 。
以下のために(int型 i = 0 ; iはV <[X] .size(); iは++ )
{
int型、Y = V [X] [I];
INTヴァル= [I] [X] W。
もし(DIS [Y]> DIS [X] + val)で
{
DIS [Y] = DIS [X] + ヴァル。
q.push(make_pair(DIS [Y]、Y))。
}
}
}
}
int型のmain()
{
freopenは(" heatwvx.in "、" R " 、STDIN)。
freopenは(" heatwvx.out "、" W " 、STDOUT)。
scanf関数(" %D%D%D%D "、&N、&M、&S&T)。
以下のために(int型 I = 1 ; I <= M; iは++ )
{
int型のX、Y、Z。
scanf関数(" %D%D%D "、およびX&Y、およびZ)。
V [X] .push_back(Y); V [Y] .push_back(X)。
W [X] .push_back(Z); W [Y] .push_back(Z)。
printf(" %d個の\ n " 、DIS [T])。
リターン 0 ;
}
経験をまとめたものです。
ACで調理(食品子供QAQの匂いを嗅ぐかのように)練習は、(それがQAQ ??食べることができるではありません)お馴染みにもっと自然に完璧な練習になります