国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

SDUT 2622 - 最短路徑(SPFA+二維)

2019-11-08 18:48:34
字體:
來源:轉載
供稿:網友

題目鏈接


http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/PRoblemdetail/pid/2622.html

題目大意


有一個有向圖,給定一個終點和起點,求起點到終點的最短路徑,并且路徑經過的邊數是 x 的倍數。

解題過程


想了好長時間,最初是想把每次的步數一起裝到隊列里面,用 SPFA 。 然后 WA , 只好去搜了下博客,原來是多了個維度,和之前做的一個題神似,UVA1600 ,這個是多了一個維度的BFS,以后得想起來這個加一個維度解決問題的方法了,要不遇到就卡死。

題目分析


大體思路是用 SPFA ,增加一個維度,儲存步數對 x 取模,最后輸出對 x 取模后是 0 的終點距離即可。

AC代碼


#include<bits/stdc++.h>using namespace std;struct node{ int v; long long w; node(int v, long long w):v(v),w(w){}};vector<node> edges[112];bool book[112];long long dis[112][11];int s, e, x;int n, m;int main(){ int T; scanf("%d", &T); while (T--) { scanf("%d %d", &n, &m); memset(book, 0, sizeof(book)); memset(dis, -1, sizeof(dis)); for (int i = 0; i < n; i++) edges[i].clear(); for (int i = 0; i < m; i++) { int u, v; long long w; scanf("%d %d %lld", &u, &v, &w); edges[u].push_back(node(v,w)); } scanf("%d %d %d", &s, &e, &x); queue<int> q; q.push(s); dis[s][0] = 0; while (!q.empty()) { int u = q.front(); for (int i = 0; i < edges[u].size(); i++) { int v = edges[u][i].v; long long w = edges[u][i].w; for (int k = 0; k < x; k++) { if (dis[u][k] != -1 && (dis[v][(k+1)%x] > dis[u][k] + w || dis[v][(k+1)%x] == -1)) { dis[v][(k+1)%x] = dis[u][k] + w; if (!book[v]) { q.push(v); book[v] = 1; } } } } book[u] = 0; q.pop(); } if (dis[e][0] == -1) printf("No Answer!/n"); else printf("%lld/n", dis[e][0]); }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 隆化县| 安宁市| 神农架林区| 新郑市| 利川市| 佛坪县| 阳朔县| 龙南县| 五家渠市| 双城市| 临安市| 永春县| 高邮市| 蓬莱市| 乐昌市| 仁化县| 宁海县| 噶尔县| 胶南市| 莱西市| 额敏县| 舒城县| 宝应县| 瑞金市| 图片| 大新县| 历史| 虹口区| 镇坪县| 清新县| 南丹县| 桃源县| 龙口市| 额济纳旗| 林西县| 故城县| 万盛区| 景宁| 赣榆县| 沙坪坝区| 隆昌县|