• poj 3255 次短路


    题目大意:

    输入点和边的个数n和m,然后输入m条边,每条边包含点l,r和距离c,让你求次短路

    基本思路:

    堆优化的迪杰斯特拉搞一下,有很多细节需要注意:

    1)if(c>diss[v]) 注意这里是>,而不是>=

    2)int sumc=c+cc;而不是 int sumc =  disf[v]+cc或者 int sumc = diss[v]+cc

    3)然后如果sumc也小disf,diss,都要push到优先队列里去

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<vector>
    #include<queue>
    
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> pii;
    const int inf = 0x3f3f3f3f;
    const int maxn = 100000+10;
    
    int disf[maxn],diss[maxn];
    vector<pii>gra[maxn];
    priority_queue<pii,vector<pii>,greater<pii> >pq;
    int main(){
        int n,m;
        cin>>n>>m;
        int l,r,c;
        for(int i=1;i<=m;i++){
            cin>>l>>r>>c;
            gra[l].push_back(make_pair(c,r));
            gra[r].push_back(make_pair(c,l));
        }
        memset(disf,inf,sizeof(disf));
        memset(diss,inf,sizeof(diss));
        disf[1]=0;
        diss[1]=inf;
        pq.push(make_pair(0,1));
        while(!pq.empty()){
            pii t=pq.top();
            pq.pop();
            int c=t.first;
            int v=t.second;
            if(c>diss[v]){
                continue;
            }
            int sz=gra[v].size();
            for(int i=0;i<sz;i++){
                pii tt=gra[v][i];
                int cc=tt.first;
                int vv=tt.second;
                int sumc=c+cc;
                if(sumc<disf[vv]){
                    int t=disf[vv];
                    disf[vv]=sumc;
                    sumc=t;
                    pq.push(make_pair(disf[vv],vv));
                }
                if(sumc>disf[vv]&&sumc<diss[vv]){
                    diss[vv]=sumc;
                    pq.push(make_pair(diss[vv],vv));
                }
            }
        }
        cout<<diss[n]<<endl;
        return 0;
    }
    

      

  • 相关阅读:
    loj 3285 「USACO 2020 US Open Platinum」Circus
    UOJ Round #19 简要题解
    AtCoder Grand Contest 043 简要题解
    JOISC 2020 部分题目简要题解
    HNOI 2019 简要题解
    十二省联考 2019 简要题解
    九省联考 2018 简要题解
    loj 6391 「THUPC2018」淘米神的树 / Tommy
    loj 6703 小 Q 的序列
    Goodbye Jihai 部分题目简要题解
  • 原文地址:https://www.cnblogs.com/imzscilovecode/p/8863322.html
Copyright © 2020-2023  润新知