UVa 10801 - Lift Hopping
2013-09-17 16:27
363 查看
题目大意:一座楼有100层,编号0-99,有n个电梯,每个电梯有不同的速度,并且只在指定的楼层停,在某一层如果有多个电梯停,在两个电梯间转移需要1分钟,求出从0层出发到达k层的所用的最短时间。
本来是正常的单源最短路问题,可是电梯转移花费的时间使得问题复杂了。刚开始是把一个节点扩展成两个节点,一个进一个出,在进出两个节点间加上60s的开销,纠结的好久才憋出来(犯了好多错误...浪费了好长时间),结果却WA了,用别人的测试用例结果也对,忽然就想到可能最终要到0层(写代码时考虑到了,可是认为不会这么干,也就没多写),处理完0之后,就好了...-_-||
View Code
本来是正常的单源最短路问题,可是电梯转移花费的时间使得问题复杂了。刚开始是把一个节点扩展成两个节点,一个进一个出,在进出两个节点间加上60s的开销,纠结的好久才憋出来(犯了好多错误...浪费了好长时间),结果却WA了,用别人的测试用例结果也对,忽然就想到可能最终要到0层(写代码时考虑到了,可是认为不会这么干,也就没多写),处理完0之后,就好了...-_-||
#include <cstdio> #include <vector> #include <queue> using namespace std; #define MAXN 110 #define INF 1e9 #define N 100 typedef pair<int, int> ii; typedef vector<ii> vii; int G[MAXN][MAXN]; int time[10]; int main() { #ifdef LOCAL freopen("in", "r", stdin); #endif int n, k; while (scanf("%d%d", &n, &k) != EOF) { for (int i = 0; i < n; i++) scanf("%d", &time[i]); for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) G[i][j] = INF; for (int i = 0; i < n; i++) { vector<int> v; do { int x; scanf("%d", &x); v.push_back(x); } while (getchar() != '\n'); for (int p = 0; p < v.size(); p++) for (int q = p+1; q < v.size(); q++) { int x = v[p], y = v[q]; G[x][y] = G[y][x] = min(G[x][y], (y-x)*time[i]); } } vector<int> dist(N, INF); dist[0] = 0; priority_queue<vii, vector<ii>, greater<ii> > pq; pq.push(ii(0, 0)); while (!pq.empty()) { ii top = pq.top(); pq.pop(); int d = top.first, u = top.second; if (u == k) break; if (d == dist[u]) for (int v = 0; v < N; v++) { if (u == 0) { if (dist[u] + G[u][v] < dist[v]) { dist[v] = dist[u] + G[u][v]; pq.push(ii(dist[v], v)); } } else { if (dist[u] + G[u][v] + 60 < dist[v]) { dist[v] = dist[u] + G[u][v] + 60; pq.push(ii(dist[v], v)); } } } } if (dist[k] != INF) printf("%d\n", dist[k]); else printf("IMPOSSIBLE\n"); } return 0; }
View Code
相关文章推荐
- UVA - 10801 Lift Hopping (Dijkstra)
- UVA 10801 Lift Hopping——最短路
- UVA - 10801 Lift Hopping 最短路
- UVA 10801 - Lift Hopping Dijkstra 算法
- UVA-10801 Lift Hopping (最短路)
- uva 10801 - Lift Hopping(最短路Dijkstra)
- uva 10801 Lift Hopping(dijkstra)
- [UVA 10801]Lift Hopping[Dijkstra][建图]
- UVa 10801 - Lift Hopping(Dijkstra, SPFA最短路)
- UVA 10801 Lift Hopping
- UVA 10801 - Lift Hopping(dijkstra)
- Lift Hopping (Uva 10801 最短路)
- UVa:10801 Lift Hopping (Bellmanford求最短路)
- UVA 10801 Lift Hopping 电梯换乘(最短路,变形)
- UVA 10801 Lift Hopping
- UVa 10801 Lift Hopping (最短路+Dijkstra+建图)
- uva 10801 - Lift Hopping(最短路Dijkstra)
- uva 10801 - Lift Hopping
- UVA 10801 Lift Hopping (最短路)
- UVA 10801 Lift Hopping (最短路)