日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法提高课-图论-单源最短路的扩展应用-AcWing 1137. 选择最佳线路:多源最短路、虚拟源点

發(fā)布時間:2025/4/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法提高课-图论-单源最短路的扩展应用-AcWing 1137. 选择最佳线路:多源最短路、虚拟源点 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目分析



來源:acwing
分析:
本題有多組測試數(shù)據(jù),如果對每個源點暴力使用dijkstra,會超時。

好的做法:建立虛擬源點S,讓S到所有真實起點的邊權為0,這樣原問題就可以轉(zhuǎn)換為從虛擬源點S到終點的單元最短路問題。

建立虛擬源點的寫法:會TLE,對了5個點

嘗試對每個起點進行dijkstra,也會TLE,結果對了7個點!!天哪。

第三次嘗試:寫了反向dijkstra,即從終點為起點,反向建邊,結果還是TLE,對了9個點,就有點生氣!

代碼1(對了5個點)

#include<bits/stdc++.h> using namespace std; const int N = 1010, INF = 0x3f3f3f3f; const int M = 20010; typedef pair<int,int> PII; #define x first #define y second int n, m, s; int h[N],e[M],w[M],ne[M],idx; int dist[N]; bool st[N];void add(int a, int b, int c){e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++; }int dijkstra(){memset(dist, 0x3f, sizeof dist);memset(st, 0, sizeof st);dist[0] = 0;priority_queue<PII, vector<PII>, greater<PII>> heap;heap.push({0,0});while(heap.size()){auto t = heap.top();heap.pop();int ver = t.y, distance = t.x; if(st[ver]) continue;st[ver] = true;for(int i = h[ver]; ~i; i = ne[i]){int j = e[i];if(dist[j] > distance + w[i]){dist[j] = distance + w[i];heap.push({dist[j], j});}}}if(dist[s] == INF) return -1;return dist[s]; }int main(){while(scanf("%d%d%d",&n, &m, &s) != -1){memset(h, -1, sizeof h);int p, q, t;while(m --){scanf("%d%d%d", &p, &q, &t);add(p, q, t);}int w;scanf("%d",&w);for(int i = 0; i< w; i++){int ver;scanf("%d",&ver);add(0,ver, 0);}printf("%d\n", dijkstra());} }

代碼2(對了9個點)

#include<bits/stdc++.h> using namespace std; const int N = 1010, INF = 0x3f3f3f3f; const int M = 20010; typedef pair<int,int> PII; #define x first #define y second int n, m, s; int h[N],e[M],w[M],ne[M],idx; int dist[N]; bool st[N]; int path[N];void add(int a, int b, int c){e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++; }void dijkstra(){memset(dist, 0x3f, sizeof dist);memset(st, 0, sizeof st);priority_queue<PII, vector<PII>, greater<PII>> heap;heap.push({0,s});dist[s] = 0;while(heap.size()){auto t = heap.top();heap.pop();int ver = t.y, distance = t.x; if(st[ver]) continue;st[ver] = true;for(int i = h[ver]; ~i; i = ne[i]){int j = e[i];if(dist[j] > distance + w[i]){dist[j] = distance + w[i];heap.push({dist[j], j});}}} }int main(){while(scanf("%d%d%d",&n, &m, &s) != -1){memset(h, -1, sizeof h);int p, q, t;while(m --){scanf("%d%d%d", &p, &q, &t);add(q, p, t);}dijkstra();int w, res = INF;scanf("%d",&w);int ver;while(w --){cin >> ver;res = min(res, dist[ver]);}if(res == INF) res = -1;printf("%d\n", res);} }

代碼3(ac:也是虛擬源點的寫法,結果就ac了,真是奇了怪了!!!)

#include<bits/stdc++.h> #define x first #define y second using namespace std;typedef pair<int, int> PII; //建立虛擬源點0 const int N = 1010, M = 40010, INF = 0x3f3f3f3f; int n, m, s; int h[N], e[M], w[M], ne[M], idx; int dist[N]; bool st[N];void add(int a, int b, int c) {e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++; } int dijkstra() {memset(dist, 0x3f, sizeof dist);memset(st, 0, sizeof st);priority_queue<PII, vector<PII>, greater<PII>> heap;heap.push({0, 0});dist[0] = 0;while (heap.size()) {PII t = heap.top();heap.pop();int ver = t.y, distance = t.x;if (st[ver]) continue;st[ver] = true;for (int i = h[ver]; ~i; i = ne[i]) {int j = e[i];if (dist[j] > distance + w[i]) {dist[j] = distance + w[i];heap.push({dist[j], j});}}}if (dist[s] == INF) return -1;return dist[s]; } int main() {while (scanf("%d%d%d", &n, &m, &s)!= -1) {memset(h, -1, sizeof h);idx = 0;int x;while (m--) {int a, b, c;scanf("%d%d%d", &a, &b, &c);add(a, b, c);}scanf("%d", &x);while (x--) {int stop;scanf("%d", &stop);add(0, stop, 0);}cout << dijkstra() << endl;}return 0; }

題目來源

https://www.acwing.com/problem/content/description/1139/

總結

以上是生活随笔為你收集整理的算法提高课-图论-单源最短路的扩展应用-AcWing 1137. 选择最佳线路:多源最短路、虚拟源点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色网址在线观看 | 九九影视理伦片 | 国产视频高清 | 日本激情电影 | 亚洲网站在线播放 | 欧美黄色特级片 | 五级 黄 色 片 | 欧美日韩一级大片 | 人人亚洲| 亚洲熟女乱综合一区二区 | 中文字幕丰满人伦在线 | 在线精品视频免费观看 | 国产一区二区三区成人 | 久久婷婷成人综合色 | 91成人免费在线视频 | 99久久亚洲精品日本无码 | 野花av| 青青草老司机 | 玖玖在线免费视频 | 亚洲熟女www一区二区三区 | 男男一级淫片免费播放 | 大肉大捧一进一出好爽mba | 国产精品一区二区黑人巨大 | 亚洲在线视频一区 | 色欲欲www成人网站 老色鬼av | 国产精品女同一区二区 | 色综合久久久久综合体桃花网 | 欧美tickle狂笑裸体vk | 5月婷婷6月丁香 | 国精品人妻无码一区二区三区喝尿 | 伊人网在线视频观看 | 麻豆免费视频网站 | 成人午夜在线观看视频 | 久久精品爱 | 亚洲91网站 | 亚洲人成无码网站久久99热国产 | 亚洲精品在线免费播放 | 五月婷婷啪啪 | 最新国产中文字幕 | 欧美一级片在线免费观看 | 成人手机在线播放 | 97人妻一区二区精品免费视频 | 91精品国产一区二区三区蜜臀 | 蜜桃精品在线观看 | 精品久久免费 | 国产精品久久久久一区二区三区 | 亚洲av无码日韩精品影片 | 丁香色欲久久久久久综合网 | av香港经典三级级 在线 | 成人免费在线观看 | 一区二区三区偷拍 | 日韩精品无码一区二区三区久久久 | 久久官网 | 婷婷丁香一区二区三区 | 国产成人精品一区二三区四区五区 | 在线看成人 | 亚洲大色网 | 久久一久久 | 国产成人啪免费观看软件 | 美日韩一区二区三区 | 国产最新网址 | xxx视频在线观看 | 午夜不卡久久精品无码免费 | 乱妇乱女熟妇熟女网站 | 中文有码在线观看 | 久久久久久久久久久久久久 | 偷拍第1页 | 黄色91视频 | 波多野结衣亚洲一区二区 | 亚洲字幕在线观看 | 欧美乱日| 欧美黄在线| 娇妻高潮浓精白浆xxⅹ | 国产www视频 | 一级黄色片一级黄色片 | 少妇一级淫片 | 亚洲综合激情小说 | av色在线观看 | 亚洲情侣av | 国产内射老熟女aaaa∵ | 男人日女人网站 | 国产91一区二区三区在线精品 | 一区二区三区日韩精品 | 在线视频自拍 | 久久的色偷偷 | 亚洲九九九 | 91aaaa| 五月天天色 | 日本久久片 | 色噜av | аⅴ资源天堂资源库在线 | 欧美女人一区二区 | 精产国产伦理一二三区 | 四虎在线免费 | 黄在线免费 | 人妻少妇无码精品视频区 | 欧美大片免费播放器 | 伊人宗合| 91精品国产色综合久久不卡粉嫩 |