POJ 2387 解题报告
2014-12-14 12:32
176 查看
又写了个n^2的dijkstra,heap的dijkstra想想还是太复杂了。
2387 | Accepted | 216K | 94MS | C++ | 1549B |
/* ID: thestor1 LANG: C++ TASK: poj2387 */ #include <iostream> #include <fstream> #include <cmath> #include <cstdio> #include <cstring> #include <limits> #include <string> #include <vector> #include <list> #include <set> #include <map> #include <queue> #include <stack> #include <algorithm> #include <cassert> using namespace std; class Edge { public: int v, w; Edge() {} Edge(int v, int w) : v(v), w(w) {} }; int dijkstra(int source, int sink, vector<vector<Edge> > &adjs) { int N = adjs.size(); std::vector<int> dis(N, INT_MAX); std::vector<bool> visited(N, false); dis[source] = 0; for (int i = 0; i < N; ++i) { int mindis = INT_MAX, minu = -1; for (int u = 0; u < N; ++u) { if (!visited[u] && dis[u] < mindis) { mindis = dis[u]; minu = u; } } if (mindis == INT_MAX || minu == sink) { break; } // cout << "minu: " << minu << ", mindis: " << mindis << endl; visited[minu] = true; for (int j = 0; j < adjs[minu].size(); ++j) { if (mindis + adjs[minu][j].w < dis[adjs[minu][j].v]) { dis[adjs[minu][j].v] = mindis + adjs[minu][j].w; } } } return dis[sink]; } int main() { int T, N; scanf("%d%d", &T, &N); vector<vector<Edge> > adjs(N, vector<Edge>()); for (int i = 0; i < T; ++i) { int u, v, w; scanf("%d%d%d", &u, &v, &w); u--, v--; adjs[u].push_back(Edge(v, w)); adjs[v].push_back(Edge(u, w)); } printf("%d\n", dijkstra(N - 1, 0, adjs)); return 0; }
相关文章推荐
- POJ-2387-Til the Cows Come Home 解题报告
- poj2387解题报告(Dijkstra算法)
- POJ 3006 解题报告
- POJ 1001Exponentiation解题报告——求高精度幂
- poj_1068_Parencodings_解题报告
- POJ-2002 Squares 解题报告
- POJ 1753 Flip Game (递归枚举)解题报告
- POJ 2719 Faulty Odometer 解题报告
- poj2407解题报告
- POJ - 2513 Colored Sticks解题报告(欧拉回路+并查集+字典树)
- poj2381解题报告
- POJ 1953 解题报告
- POJ - 1416 Shredding Company解题报告(dfs)
- poj 2389 解题报告 大数乘法
- poj 1247 Magnificent Meatballs 解题报告
- POJ—1061 青蛙的约会 解题报告(超详细)
- 北大POJ解题报告-1003 Hangover
- POJ-1321 棋盘问题 解题报告(搜索) 棋盘问题
- POJ 2853 解题报告
- [zz]Flip and Shift -- POJ 1063 解题报告