poj 2449 k短路模板(有环)
2014-12-02 10:26
232 查看
#include <iostream> #include <cstdio> #include <cstring> #include <vector> #include <queue> using namespace std; const int maxn = 1000 + 10; const int INF = 1<<29; vector<int>E[maxn], W[maxn], Ek[maxn], Wk[maxn]; int d[maxn]; bool vis[maxn]; struct Node { int u, len; Node(int tu, int tlen) : u(tu), len(tlen) {} Node(){} bool operator < (const Node & rhs) const { return len + d[u] > rhs.len + d[rhs.u]; } }; int k_road(int s, int t, int n, int k) { priority_queue<Node>q; q.push(Node(s, 0)); int tk = 0; while(!q.empty()) { Node f = q.top(); q.pop(); if(f.u == t) { tk++; if(tk == k) { return f.len; } } int u = f.u; for( int i=0; i<Ek[u].size(); i++ ) { int v = Ek[u][i]; q.push(Node(v, f.len+Wk[u][i])); } } return -1; } void spfa(int s, int t, int n) { for( int i=1; i<=n; i++ ) d[i] = INF; d[t] = 0; queue<int>q; q.push(t); memset(vis, 0, sizeof(vis)); vis[t] = true; while(!q.empty()) { int f = q.front(); q.pop(); vis[f] = false; for( int i=0; i<E[f].size(); i++ ) { int v = E[f][i]; if(d[v] > d[f] + W[f][i]) { d[v] = d[f] + W[f][i]; if(vis[v] == false) { vis[v] = true; q.push(v); } } } } } int main() { //freopen("in","r", stdin); int n, m; while(scanf("%d%d", &n, &m) != EOF) { int s, t, k; for( int i=1; i<=n; i++ ) E[i].clear(), W[i].clear(), Ek[i].clear(), Wk[i].clear(); for( int i=0; i<m; i++ ) { int u, v, w; scanf("%d%d%d", &v, &u, &w); E[u].push_back(v); W[u].push_back(w); Ek[v].push_back(u); Wk[v].push_back(w); } scanf("%d%d%d", &s, &t, &k); if(s == t) k++; spfa(s, t, n); if(d[s] == INF) { printf("-1\n"); continue; } /*for( int i=1; i<=n; i++ ) printf("%d ", d[i]); printf("\n");*/ int ans = k_road(s, t, n, k); if(ans == -1) printf("-1\n"); else printf("%d\n", ans); } return 0; }
相关文章推荐
- poj 2449 Remmarguts' Date (k短路模板)
- poj 2449 k短路--模板
- poj 2449 A* +Dijkstra求第K短路(模板题)
- <A*算法模板>poj 2449 第k短路
- POJ 2449 Remmarguts' Date (第k短路 A*搜索算法模板)
- POJ - 2449 Remmarguts' Date(k短路模板)
- 【模板】POJ 2449 K短路(A*+dijkstra)
- poj2449 K短路模板题
- (poj 2449 Remmarguts' Date)<A*-K短路模板>
- poj2449 Remmarguts' Date --- k短路模板(SPFA+A*)
- poj 2449 k短路--模板
- poj 2449 Remmarguts' Date(A*求第K短路)
- poj-2449-Remmarguts' Date-A*+求K短路
- Poj 2449 Remmarguts' Date(Astar K短路)
- poj 2449 Remmarguts' Date(第K短路 A*)
- POJ2449 A*+第K短路
- POJ 2387 Til the Cows Come Home(最短路模板)**
- POJ 1847 Tram【最短路入门Dijkstra算法模板题目一】
- POJ 2449 求第K短路
- POJ 2449 A*k短路