Why Dij 0pts?
查看原帖
Why Dij 0pts?
338147
01bit楼主2020/12/13 21:33
#include <cstdio>
#include <cstring>
#include <queue>
#include <utility>
#define inf (6200000)
using namespace std;
struct Edge{
    int v, w;
    int next;
} edge[6201];
int head[2501], cnt = 1;
void addedge(int u, int v, int w){
    edge[cnt].v = v;
    edge[cnt].w = w;
    edge[cnt].next = head[u];
    head[u] = cnt++;
}
int Dijkstra(int s,int t){
    priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > q;
    int dis[2501];
    bool vis[2501];
    memset(dis, inf, sizeof(dis));
    memset(vis, false, sizeof(vis));
    q.push(make_pair(0, s));
    while(!q.empty()){
        pair<int, int> top = q.top();
        q.pop();
        int u = top.second,w = top.first;
        if(vis[u]) continue;
        vis[u] = true;
        dis[u] = w;
        for(int i = head[u];i != 0;i = edge[i].next){
            int v = edge[i].v;
            if(dis[v] > dis[u] + edge[i].w) q.push(make_pair(dis[u] + edge[i].w, v));
        }
    }
    return dis[t];
}
int n, m, s, t;
int main(){
    scanf("%d%d%d%d", &n, &m, &s, &t);
    while(--m){
        int u, v, w;
        scanf("%d%d%d", &u, &v, &w);
        addedge(u, v, w);
        addedge(v, u, w);
    }
    printf("%d", Dijkstra(s, t));
    return 0;
}

大 红 大 紫

2020/12/13 21:33
加载中...