赞
踩
- #include<iostream>
- #include<queue>
- #include<cstring>
- using namespace std;
-
- const int N = 100010;
-
- int e[N], ne[N], w[N], h[N], idx;
- int dist[N];
- bool st[N]; // 此法的st数组表示的是否在que中
- int n, m;
-
- void add(int a, int b, int c)
- {
- e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
- }
-
- int spfa()
- {
- memset(dist, 0x3f, sizeof dist);
- dist[1] = 0;
- queue<int> q;
- q.push(1);
- st[1] = true;
-
- while (q.size())
- {
- int t = q.front();
- q.pop();
-
- st[t] = false;
- for (int i = h[t]; i != -1; i = ne[i])
- {
- int j = e[i];
- if (dist[j] > dist[t] + w[i])
- {
- dist[j] = dist[t] + w[i];
- if (!st[j])
- {
- q.push(j);
- st[j] = true;
- }
- }
- }
- }
- return dist[n];
-
- }
- int main()
- {
-
- cin >> n >> m;
-
- memset(h, -1, sizeof h);
-
- while (m--)
- {
- int a, b, c;
- cin >> a >> b >> c;
- add(a, b, c); //邻接表不用考虑重边的问题
- }
- int t = spfa();
- if (t == 0x3f3f3f3f) puts("impossible");
- else
- {
- cout << t << endl;
- }
- return 0;
-
-
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。