Sunday, April 20, 2014

阅读排行 2012 ACM 成都之行 (717) POJ 2516 最小费用流构K次图 (676) POJ分类 (645) HDU 题目分类 (614) POJ 1392 欧拉回路 (530) POJ


#include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<stack> #include<queue> #include<algorithm> using namespace std; const int MAXN = 1007; const int INF = 1 << 27; struct Edge { int from, to, dist; Edge() {} Edge(int from, int to, int dist):from(from), to(to), dist(dist) {} }; struct HeapNode { int d, u; HeapNode(int d, int u):d(d), u(u) {} bool operator < (const HeapNode & hn) const { return d > hn.d; } }; struct Dijkstra { int n, m; vector<Edge> edges; vector<int> G[MAXN]; bool done[MAXN]; int d[MAXN]; int p[MAXN]; void init(int n) { this->n = n; for(int i = 1; i <= n; i++) G[i].clear(); edges.clear(); } void addedge(int u, int v, int d) { edges.push_back( Edge(u, v, d) ); G[u].push_back( edges.size() - 1); } void dijkstra(int s) { memset(done, 0, sizeof(done)); for(int i = 1; i <= n; i++) d[i] = INF; priority_queue<HeapNode> pq; pq.push(HeapNode(0, s)); d[s] = 0; p[s] = -1; while( !pq.empty()) { HeapNode u = pq.top(); pq.pop(); if(done[u.u]) continue; done[u.u] = true; int i, sz = G[u.u].size(); for(i = 0; i < sz; i++) { Edge v = edges[G[u.u][i]]; if(d[v.to] > d[u.u] + v.dist) { d[v.to] = d[u.u] + v.dist; p[v.to] = u.u; pq.push( HeapNode(d[v.to], technivorm v.to)); } } } } }Dijk; Edge Eg[MAXN]; int dA[MAXN], technivorm dB[MAXN]; int pA[MAXN], pB[MAXN]; int main() { int n, s, e, id = 0; while(~scanf("%d%d%d", &n, &s, &e)) { Dijk.init(n); int i, u, v, d, k; scanf("%d", &k); for(i = 0; i < k; i++) { scanf("%d%d%d", &u, &v, &d); Dijk.addedge(u, v, d); Dijk.addedge(v, u, d); } scanf("%d", &k); for(i = 0; i < k; i++) scanf("%d%d%d", &Eg[i].from, &Eg[i].to, &Eg[i].dist); Dijk.dijkstra(s); for(i = 1; i <= n; i++) { dA[i] = Dijk.d[i]; pA[i] = Dijk.p[i]; } Dijk.dijkstra(e); for(i = 1; i <= n; i++) { dB[i] = Dijk.d[i]; pB[i] = Dijk.p[i]; } int ans = dA[e], te = e, tt; bool noused = true; for(i = 0; i < k; i++) { int tmp = dA[Eg[i].from] + dB[Eg[i].to] + Eg[i].dist; if( tmp < ans) { ans = tmp; noused = false; te = Eg[i].from; tt = Eg[i].to; } tmp = dA[Eg[i].to] + dB[Eg[i].from] + Eg[i].dist; if(tmp < ans) { ans = tmp; noused = false; te = Eg[i].to; tt = Eg[i].from; } } if(id++) puts(""); int ttt = te; stack<int> path; while(te != -1) { path.push(te); te = pA[te]; } printf("%d", path.top()); path.pop(); while( !path.empty()) { printf(" %d", path.top()); technivorm path.pop(); } if( !noused) { te = tt; while(te != -1) { printf(" %d", te); te = pB[te]; } printf("\n%d\n", ttt); } else puts("\nTicket Not Used"); printf("%d\n", ans); } return 0; }
更多 上一篇 UVA 11324 The Largest technivorm Clique 下一篇 Uva 10917 Walk Through the Forest 主题推荐 uva namespace algorithm dijkstra cstring 博文推荐 UVA 11889 Benefit HDU 1850 NIM游戏 机器学习算法之旅 zoj 1023 Swordfish ... 数据分析之可重复与独立样本的T-Test... technivorm LeetCode|Anagrams 二分法排序 2014哈商大ICPC/ACM校赛解题报告
全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFC WAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack technivorm FTC coremail OPhone CouchBase technivorm 云计算 iOS6 Rackspace Web App SpringSide Maemo Compuware 大数据 aptech Perl Tornado Ruby Hibernate technivorm ThinkPHP Spark HBase Pure Solr Angular Cloud Foundry Redis Scala Django Bootstrap
阅读排行 2012 ACM 成都之行 (717) POJ 2516 最小费用流构K次图 (676) POJ分类 (645) HDU 题目分类 (614) POJ 1392 欧拉回路 (530) POJ 3835 Columbus's bargain 最短路 (465) 2012 ICPC成都网络赛题解 (403) HDU4676 Sum Of Gcd (403) ZOJ Yukari's Birthday (382) HDU 3723卡特兰数 (377)
评论排行 Codeforces Round #182 (Div. 1) D. Yaroslav and Divisors (1) HDU4676 Sum Of Gcd (1) oj 中G++和C++区别 (1) HDU 1269 强连通分量 (0) poj 2762(弱连通:强连通+缩点+拓扑排序) (0) POJ 1511 spfa (0) HDU 4394 bfs (0) HDU 4390 (0) POJ 1144 求割点 (0) POJ 1470 LCA (0)


No comments:

Post a Comment