Codeforces Alpha Round #20 (Codeforces format) C. Dijkstra?(裸的dijkstra)
来源:互联网 发布:asp防止sql注入代码 编辑:程序博客网 时间:2024/06/06 09:36
题目链接:http://codeforces.com/problemset/problem/20/C
思路:需要用优化过的dijkstra,提供两种写法。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <queue>#include <set>#define REP(i, a, b) for (int i = (a); i < (b); ++i)#define FOR(i, a, b) for (int i = (a); i <= (b); ++i)#define TR(iter, c) for (__typeof(c.begin()) iter = c.begin(); iter != c.end(); ++iter)using namespace std;const int MAX_N = (100000 + 100);const long long inf = 1LL << 60;int N, M, pre[MAX_N];long long dist[MAX_N];struct cmp {bool operator() (const int &p1, const int &p2) const {return dist[p1] <= dist[p2];}};vector<pair<int, int > > g[MAX_N];set<int, cmp> q;void Dijkstra(){dist[1] = 0;q.insert(1);while (!q.empty()) {int u = *q.begin();q.erase(q.begin());REP(i, 0, (int)g[u].size()) {int v = g[u][i].first, w = g[u][i].second;if (dist[u] + w < dist[v]) {q.erase(v);dist[v] = dist[u] + w;pre[v] = u;q.insert(v);}}}}void dfs(int u){if (u != 1) dfs(pre[u]);printf("%d ", u);}int main(){cin >> N >> M;FOR(i, 1, N) dist[i] = inf;FOR(i, 1, M) {int u, v, w; cin >> u >> v >> w;g[u].push_back(make_pair(v, w));g[v].push_back(make_pair(u, w));}Dijkstra();if (dist[N] >= inf) { puts("-1"); return 0; }dfs(N);return 0;}
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <queue>#define REP(i, a, b) for (int i = (a); i < (b); ++i)#define FOR(i, a, b) for (int i = (a); i <= (b); ++i)using namespace std;const int MAX_N = (100000 + 100);const long long inf = 1LL << 60;int N, M, pre[MAX_N], vis[MAX_N];long long dist[MAX_N];struct cmp {bool operator() (const pair<long long, int>&p, const pair<long long, int>&q) const {return p.first >= q.first;}};vector<pair<int, int > > g[MAX_N];priority_queue<pair<long long, int>, vector<pair<long long, int> >, cmp> pq;void Dijkstra(){pq.push(make_pair(dist[1] = 0, 1));while (!pq.empty()) {pair<long long, int> p = pq.top();pq.pop();if (vis[p.second]) continue;vis[p.second] = 1;REP(i, 0, (int)g[p.second].size()) {int v = g[p.second][i].first, w = g[p.second][i].second;if (p.first + w < dist[v]) {dist[v] = p.first + w;pre[v] = p.second;if (!vis[v]) pq.push(make_pair(dist[v], v));}}}}void dfs(int u){if (u != 1) dfs(pre[u]);printf("%d ", u);}int main(){cin >> N >> M;FOR(i, 1, N) dist[i] = inf, vis[i] = 0;FOR(i, 1, M) {int u, v, w; cin >> u >> v >> w;g[u].push_back(make_pair(v, w));g[v].push_back(make_pair(u, w));}Dijkstra();if (dist[N] >= inf) { puts("-1"); return 0; }dfs(N);return 0;}
0 0
- Codeforces Alpha Round #20 (Codeforces format) C. Dijkstra?(裸的dijkstra)
- Codeforces Alpha Round #20 C. Dijkstra?(优先队列优化)
- Codeforces 20C Dijkstra?
- codeforces 20C Dijkstra?
- CodeForces 20C Dijkstra? (最短路)
- Codeforces Alpha Round #21 (Codeforces format) D. Traveling Graph
- codeforces 20 c 堆优化dijkstra + 路径打印
- Codeforces Alpha Round #21 C. Stripe 2 【DP+标记想法】
- Codeforces Round #257 (Div. 2)D(最短路Dijkstra+堆优化)
- Codeforces Round #372 (Div. 2) -- D. Complete The Graph(Dijkstra单源最短路)
- CodeForces 601A The Two Routes(dijkstra最短路)——Codeforces Beta Round #333 (Div.1 Div. 2)
- Yaroslav and Time - CodeForces 301B Dijkstra
- Codeforces 144D. Missile Silos【dijkstra】
- codeforces 507E (dijkstra+优先队列)
- Codeforces 601A Dijkstra最短路
- CodeForces 601A (dijkstra算法)
- Codeforces Beta Round #31 (Div. 2, Codeforces format)——C
- Codeforces Beta Round #29 (Div. 2, Codeforces format), problem: (C) Mail Stamps 图论
- 噪声分析系统统计sql总结
- 远程线程注入dll
- Airplay 教程: 一个 Apple TV 多人竞答游戏(1)
- 面试笔试100篇
- 关于c#泛类型参数T的约束
- Codeforces Alpha Round #20 (Codeforces format) C. Dijkstra?(裸的dijkstra)
- POJ训练计划3009_Curling 2.0(DFS)
- c++类自实现列表,有点意思
- C#解析json文件的方法
- mysql索引字段长度的问题
- cmd下编译运行eclipse工程java Exception inthread main java.long.NoClassDefFoundError:xxx
- ORACLE MERGE INTO语句,unable to get a stable set of rows in the source tables报错解决
- 判断win7系统是否遭受木马攻击的方法
- IOS多线程编程之Grand Central Dispatch(GCD)介绍和使用