---------------------------------熱波グラフ理論(SPFA)/最短

この夏の暑さから苦しんでいる人のテキサスシンプルさが巨大な波!

彼らのテキサスロングホーンズは良い味が、彼らはクリームを生産する乳製品を豊かで非常に良いものではありません。

ファーマージョンはリードにテキサンズは痛みに耐え、熱を減少させるために、テキサスのタスクに冷たい牛乳の栄養配信を大量に取るためにこの時間を要しました。

ジョンはテキサスルートにウィスコンシン州からミルクを輸送することが可能に研究してきました。

ルートは、符号1 T.参照を容易にするために、始点と終点T町の合計を含みます

道路による双方向の開始と終了に加えて、各町は、少なくとも二つの他の町を接続します。

それぞれ、(燃料費、通行料などを含む)を介して、道路のコストを持っています。

道路C第2条の町に直接接続してマップを考えます。

道路Rsと、再使用済みCIエンドコンポーネントの開始時点からの各パス。

テ町は、最初のTSの最後まで町から最小限の総コストを求めています。

入力フォーマット
最初のライン:4つの整数がスペースで区切られた:T、C、TS、テ 。

C + 1から2:行I + 1、i番目の行は三つの整数を含む、道路に記載されているがスペースで区切られた:Rsと、再、CI。

出力形式
のTeへのTSの総コストが最小の単一の整数。

データは、少なくとも1本の道路が存在することを保証します。

データ範囲
1≤T≤2500、
1≤C≤6200、
Re≤Tの1≤Ts、Teを、RS、
1≤Ci≤1000の
入力サンプル:
。7. 5. 4. 11
2 2 4
1 4 3。
7 2 2
3 4。 3
。5 7 5
7 3 3
6 1 1
6 3 4
2 4 3
5 6 3
7 2 1
出力サンプル:
7

分析:
最短ボード


#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1000;
int t,c,sx,ex;
int h[N],e[N],ne[N],idx,w[N];
int dist[N];
bool st[N];
void add(int a,int b,int c)
{
    e[idx]=b;w[idx]=c;ne[idx]=h[a];h[a]=idx++;
}
void spfa()
{
    memset(dist,0x3f,sizeof dist);
    dist[sx]=0;
    queue<int> q;
    q.push(sx);
    st[sx]=true;
    while(q.size())
    {
        int t=q.front();
        q.pop();
        st[t]=false;
        for(int i=h[t];~i;i=ne[i])
        {
            int j=e[i];
            if(dist[j]>dist[t]+w[i])
            {
                dist[j]=dist[t]+w[i];
                if(!st[j])
                {
                     q.push(j);
                    st[j]=true;
                }
            }
        }
    }
    
}
int main()
{
    cin>>t>>c>>sx>>ex;
    memset(h,-1,sizeof h);
    for(int i=0;i<c;i++)
    {
        int a,b,w;
        cin>>a>>b>>w;
        add(a,b,w);
        add(b,a,w);
    }
    spfa();
    cout<<dist[ex]<<endl;
}
公開された383元の記事 ウォン称賛7 ビュー8024

おすすめ

転載: blog.csdn.net/qq_43690454/article/details/104276931