首页 > 代码库 > bzoj 2015
bzoj 2015
http://www.lydsy.com/JudgeOnline/problem.php?id=2015
裸最短路(‘ ‘ ) 不过我最初以为是mst (‘ ‘ )
#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <algorithm>using namespace std;const int maxn = 100010;const int maxe = 100010;const int INF = 0x3f3f3f3f;int n, m, Q;struct edge { int t, d; edge* next;}e[maxe * 2], *head[maxn]; int ne = 0;void addedge(int f, int t, int d) { e[ne].t = t, e[ne].d = d, e[ne].next = head[f], head[f] = e + ne ++;}struct pr { int dis, pos; pr(int a, int b) { dis = a, pos = b; } };bool operator < (const pr &a, const pr &b) { return a.dis > b.dis;}priority_queue <pr> q;int dis[maxn];void dijkstra(int s) { memset(dis, INF, sizeof(dis)); dis[s] = 0; for(int i = 1; i <= n; ++ i) q.push(pr(dis[i], i)); while(!q.empty()) { pr x = q.top(); q.pop(); if(x.dis != dis[x.pos]) continue; for(edge* p = head[x. pos]; p; p = p-> next) { if(dis[p-> t] > dis[x. pos] + p-> d) dis[p-> t] = dis[x. pos] + p-> d, q.push(pr(dis[p-> t], p-> t)); } }}int int_get() { int x = 0; char c = (char)getchar(); bool f = 0; while(!isdigit(c)) { if(c == ‘-‘) f = 1; c = (char)getchar(); } while(isdigit(c)) { x = x * 10 + (int)(c - ‘0‘); c = (char)getchar(); } if(f) x = -x; return x;}void read() { n = int_get(), m = int_get(); Q = int_get(); for(int i = 1; i <= m; ++ i) { int u, v, w; u = int_get(), v = int_get(), w = int_get(); addedge(u, v, w); addedge(v, u, w); }}void sov() { dijkstra(1) ; while(Q --) { int a, b; a = int_get(), b = int_get(); printf("%d\n", dis[a] + dis[b]); }}int main() { //freopen("test.in", "r", stdin); read(), sov(); return 0;}
bzoj 2015
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。