uestc 方老师的分身 II
2015-02-17 05:14
507 查看
题意:求s到t走过边数大于k的最短路
思路:邻接表实现,用w[u][e]来维护(看的大牛博客),u表示当前点,e表示已经经过多少条边。感觉有点类似DP。
在边数大于k的处理上,发现还是使之等于k(K<=50),节省存储空间。
spfa算法实现。
思路:邻接表实现,用w[u][e]来维护(看的大牛博客),u表示当前点,e表示已经经过多少条边。感觉有点类似DP。
在边数大于k的处理上,发现还是使之等于k(K<=50),节省存储空间。
spfa算法实现。
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<queue> #include<algorithm> #include<map> #include<iomanip> #include<climits> #include<string.h> #include<cmath> #include<stdlib.h> #include<vector> #define INF 1000000007 #define MAXN 5010 #define maxn 1000010 #define Mod 1000007 #define N 1010 using namespace std; typedef long long LL; struct node{ int u, e; }; int n, m, u, v, wt; int s, t, k; int ans; int dist[MAXN][55]; bool inq[MAXN][55]; vector< pair<int, int> > G[MAXN]; void spfa(int s) { int u, v, e, i, j, len; for (i = 0; i <= n; ++i) for (j = 0; j <= 50; ++j) { dist[i][j] = INF; inq[i][j] = 0; } queue<node> q; ans = INF; dist[s][0] = 0; inq[s][0] = true; q.push({s,0}); while (!q.empty()) { node tmp = q.front(); q.pop(); u = tmp.u; e = tmp.e; if (u == t && e == k) ans = min(dist[u][e],ans); inq[u][e] = false; int time; if (e + 1 > k) time = k; else time = e + 1; for (i = 0; i < G[u].size(); ++i) { v = G[u][i].first; len = G[u][i].second; if (dist[v][time] > len + dist[u][e]) { dist[v][time] = len + dist[u][e]; if (!inq[v][time]) { q.push({ v, time }); inq[v][time] = true; } } } } } int main() { while (cin >> n >> m) { for (int i = 0; i < MAXN; ++i) G[i].clear(); for (int i = 0; i < m; ++i) { cin >> u >> v >> wt; G[u].push_back({ v, wt }); G[v].push_back({ u, wt }); } cin >> s >> t >> k; spfa(s); if (ans == INF) puts("-1"); else cout << ans << endl; } return 0; }
相关文章推荐
- UESTC 915 方老师的分身II --最短路变形
- 2014 UESTC Training for Graph Theory Problem H 方老师的分身 II
- 2014 UESTC Training for Graph Theory Problem G 方老师分身 I
- cdoj915-方老师的分身 II (长度不小于k的最短路)【spfa】
- 2014 UESTC Training for Graph Theory Problem I 方老师的分身 III
- uestc 方老师分身 I
- uestc 方老师的分身IV
- UESTC 915 -- 方老师的分身 II (spfa,dijkstra)
- uestc 方老师的分身 III 拓扑排序
- UESTC 914 方老师的分身I Dijkstra
- UESTC_方老师分身 I CDOJ 914
- UESTC 914 -- 方老师分身 I(Dijkstra)
- UESTC 916 方老师的分身III --拓扑排序
- UESTC_方老师的分身 II CDOJ 915
- UESTC 917 方老师的分身IV --求欧拉路径
- uestc 方老师和缘分
- UESTC 883 方老师与两个串 --二分搜索+DP
- UESTC 884 方老师的专题讲座 --数位DP
- UESTC 885 方老师买表 --状压DP
- cdoj914-方老师分身 I 【dijkstra】