POJ 3159 Candies (差分约束#1)
2012-07-31 23:10
288 查看
用了两种方法:用栈的SPFA和用优先队列的Dijkstra都是500ms+
#include <cstdio> #include <algorithm> #include <queue> #include <cstdlib> #include <cstring> #include <stack> #define N 30005 #define M 150005 using namespace std; const int inf = (-1u >> 1); int n, m; typedef pair<int, int> pii; int first , d ; int next[M], u[M], v[M], w[M]; bool inq ; int SPFA(int s, int n)//用栈 { for (int i = 1; i <= n; i++)d[i] = inf; d[s] = 0; stack<int> q; memset(inq, false, sizeof(inq)); q.push(s); while (!q.empty()) { int x = q.top();q.pop(); inq[x] = false; for (int e = first[x]; e != -1; e = next[e])if (d[v[e]] > d[u[e]] + w[e]) { d[v[e]] = d[u[e]] + w[e]; if (!inq[v[e]]) { inq[v[e]] = true; q.push(v[e]); } } } return d ; } void dijkstra(int s, int n) { for (int i = 1;i <= n; i++)d[i] = inf; d[s] = 0; priority_queue<pii, vector<pii>, greater<pii> > q; q.push(make_pair(d[s], s)); while (!q.empty()) { pii u = q.top();q.pop(); int x = u.second; if (u.first != d[x])continue; for (int e = first[x]; e != -1; e = next[e])if (d[v[e]] > d[x] + w[e]) { d[v[e]] = d[x] + w[e]; q.push(make_pair(d[v[e]], v[e])); } } } int main() { // FILE* fp = fopen("in.txt", "r"); while (scanf( "%d", &n) != EOF && n) { scanf( "%d", &m); int a, b, c; int e = 0; for (int i = 1;i <= n ; i++)first[i] = -1; for (int i = 0; i < m; i++) { scanf( "%d %d %d", &a, &b, &c); next[e] = first[a]; first[a] = e; w[e] = c; u[e] = a, v[e] = b; e++; } dijkstra(1, n); printf("%d\n", d ); } return 0; }
相关文章推荐
- POJ 3159 Candies
- POJ 3159 Candies
- poj 3159 Candies
- POJ 3159 Candies(差分约束)
- SPFA+Stack||Dijkstra+Heap-POJ-3159-Candies
- POJ3159 Candies(差分约束)
- POJ 3159 Candies (差分约束 Dijkstra+优先队列 SPFA+栈)
- poj 3159 Candies
- poj 3159 Candies 【简单差分约束】 【SPFA + 数组模拟栈】
- poj 3159 -- Candies ( spfa + 栈 )
- poj 3159 Candies
- POJ-3159-Candies
- POJ 3159 Candies 解题报告(Dijkstra & SPFA) 及 双向Dijkstra性能测试
- (简单) POJ 3159 Candies,Dijkstra+差分约束。
- POJ 3159 Candies(差分规划+SPFA)
- poj 3159 Candies
- poj-3159 Candies(差分约束问题)
- POJ 3159 Candies (差分约束 Dijkstra+优先队列 SPFA+栈)
- poj 3159 candies (差分约束 spfa+stack)
- poj 3159 Candies------spfa算法