145 条题解

  • -3
    @ 2022-11-1 22:27:02

    Dijkstra+STL的优先队列优化。

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <cctype>
    #include <climits>
    #include <algorithm>
    #include <map>
    #include <queue>
    #include <vector>
    #include <ctime>
    #include <string>
    #include <cstring>
    using namespace std;
    const int N=405;
    struct Edge {
        int v,w;
    };
    vector<Edge> edge[N*N];
    int n;
    int dis[N*N];
    bool vis[N*N];
    struct cmp {
        bool operator()(int a,int b) {
            return dis[a]>dis[b];
        }
    };
    int Dijkstra(int start,int end)
    {
        priority_queue<int,vector<int>,cmp> dijQue;
        memset(dis,-1,sizeof(dis));
        memset(vis,0,sizeof(vis));
        dijQue.push(start);
        dis[start]=0;
        while(!dijQue.empty()) {
            int u=dijQue.top();
            dijQue.pop();
            vis[u]=0;
            if(u==end)
                break;
            for(int i=0; i<edge[u].size(); i++) {
                int v=edge[u][i].v;
                if(dis[v]==-1 || dis[v]>dis[u]+edge[u][i].w) {
                    dis[v]=dis[u]+edge[u][i].w;
                    if(!vis[v]) {
                        vis[v]=true;
                        dijQue.push(v);
                    }
                }
            }
        }
        return dis[end];
    }
    int main()
    {
        int a,b;
        scanf("%d%d",&a,&b);
        Edge Qpush;
        
        Qpush.v=1;
        Qpush.w=a;
        edge[0].push_back(Qpush);
        
        Qpush.v=2;
        Qpush.w=b;
        edge[1].push_back(Qpush);
        
        printf("%d",Dijkstra(0,2));
        return 0;
    }
    
    
    

    信息

    ID
    56
    时间
    1000ms
    内存
    1024MiB
    难度
    1
    标签
    递交数
    9106
    已通过
    4056
    上传者