1 条题解

  • 0
    @ 2023-3-18 8:25:49

    dijkstra 模板。

    #include "bits/stdc++.h"
    using namespace std;
    
    struct edge {
    	int to, dis, nxt;
    }e[1919810];
    
    struct Node {
    	int x, dis;
    	bool operator < (const Node &p) const {
    		return dis > p.dis;
    	}
    };
    
    priority_queue<Node> q;
    
    int hd[1919810];
    int dis[1919810];
    int cnt;
    int vis[1919810];
    int n, m, s, t;
    
    void add_edge(int u, int v, int d) {
    	++cnt;
    	e[cnt].dis = d;
    	e[cnt].to = v;
    	e[cnt].nxt = hd[u];
    	hd[u] = cnt;
    }
    
    void dijkstra() {
    	Node al, be;
    	al.x = s;
    	al.dis = 0;
    	dis[s] = 0;
    	//vis[s] = 1;
    	q.push(al);
    	
    	while (!q.empty()) {
    		be = q.top();
    		q.pop();
    		
    		int u = be.x, d = be.dis;
    		vis[u] = 1;
    		for (int i = hd[u]; i; i = e[i].nxt) {
    			al.x = e[i].to;
    			al.dis = e[i].dis + d;
    			if (!vis[al.x] && al.dis < dis[al.x]) {
    				dis[al.x] = al.dis;
    				q.push(al);
    			}
    		}
    	}
    }
    
    int main() {
    	scanf ("%d%d", &n, &m);
    	for (int i = 1; i <= m; ++i) {
    		int u, v, d;
    		scanf ("%d%d%d", &u, &v, &d);
    		add_edge(u, v, d);
    		add_edge(v, u, d);
    	} 
    	scanf ("%d%d", &s, &t);
    	for (int i = 1; i <= n; ++i) dis[i] = 0x3f3f3f3f;
    	dijkstra();
    	if (dis[t] == 0x3f3f3f3f) puts("-1");
    	else printf ("%d", dis[t]);
    }
    
    • 1

    信息

    ID
    321
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    76
    已通过
    15
    上传者