POJ1511 Invitation Cards(SPFA+逆图)
来源:互联网 发布:加入淘宝教育 编辑:程序博客网 时间:2024/05/21 20:22
链接:http://poj.org/problem?id=1511
题意:
求从1出发到每个点,再从每个点出发到1的最短路
从1到每个点的最短路,用一次spfa就能求出来了,但是从每个点到1的就很难求
所以存了两幅图,一副是正常方向的图,一副是相反的逆图,再从1出发,求一次逆图的最短路
就可以求出从每个点到1的距离了
而且,因为这题数据比较大,所以我原本准备用vector来存边,结果会超时,所以从其他博客中学习,改用链表的形式来存边,能节省很多空间和时间
非常好的方法
代码:
#include<cstdio>#include<algorithm>#include<iostream>#include<string>#include<cstring>#include<cstdlib>#include<cmath>#include<set>#include<map>#include<vector>#include<queue>#include<ctime>using namespace std;const int INF = 1e9 + 9;const int MAXN = 1000000 + 10;int n, m;struct node{int to, l;int next;}edge[2][MAXN];//0是正向图,1是逆向图bool vis[MAXN];int d[MAXN];int tol[2];int head[2][MAXN];void addedge(int s, int e, int l, int k)//用k标记是正图还是逆图{int &tot = tol[k];edge[k][tot].to = e;edge[k][tot].l = l;edge[k][tot].next = head[k][s];head[k][s] = tot++;}void Spfa(int st, int k){int i;for (i = 1; i <= n; i++){d[i] = INF;vis[i] = false;}d[st] = 0;vis[st] = true;queue<int> Q;Q.push(st);while (!Q.empty()){int start = Q.front();Q.pop();vis[start] = false;for (i = head[k][start]; i != -1; i = edge[k][i].next){if (d[start] + edge[k][i].l < d[edge[k][i].to]){d[edge[k][i].to] = d[start] + edge[k][i].l;if (!vis[edge[k][i].to]){vis[edge[k][i].to] = true;Q.push(edge[k][i].to);}}}}}int main(){// freopen("D://input.txt", "r", stdin);// freopen("D://output.txt", "w", stdout);int T;scanf("%d", &T);while (T--){memset(head, -1, sizeof(head));tol[0] = tol[1] = 0;//边数初始化为0int i;scanf("%d%d", &n, &m);for (i = 0; i < m; i++){int x, y, z;scanf("%d%d%d", &x, &y, &z);addedge(x, y, z, 0);addedge(y, x, z, 1);}__int64 sum = 0;Spfa(1, 0);for (i = 1; i <= n; i++){sum += d[i];}Spfa(1, 1);//两次spfafor (i = 1; i <= n; i++){sum += d[i];}printf("%I64d\n", sum);}// printf("\n%.3lf\n",clock()/CLOCKS_PER_SEC);return 0;}
0 0
- POJ1511 Invitation Cards(SPFA+逆图)
- POJ1511 Invitation Cards(SPFA)
- POJ1511 Invitation Cards【SPFA】
- poj1511||hdu1535 Invitation Cards spfa
- spfa-spfa(deque)-poj1511 - Invitation Cards
- poj1511——Invitation Cards(SPFA+邻接表)
- poj1511 Invitation Cards(SPFA+前向星)
- poj1511(Invitation Cards)Prim
- poj1511 Invitation Cards (前向星?)
- poj1511 Invitation Cards(最短路)
- POJ1511 Invitation Cards
- poj1511 - Invitation Cards
- poj1511 Invitation Cards
- POJ1511 Invitation Cards
- POJ1511 Invitation Cards
- POJ1511 Invitation Cards
- [poj1511] Invitation Cards
- poj1511 Invitation Cards
- AJAX POST&跨域 解决方案 - CORS
- 浅谈算法和数据结构: 十一 哈希表 http://blog.jobbole.com/79261/
- Android XML属性介绍
- 大数据平台任务调度与监控系统
- LeetCode之Summary Ranges
- POJ1511 Invitation Cards(SPFA+逆图)
- C++中指针和引用的区别
- VS2010 C++ 学习笔记(六) this指针 const 指针 引用
- 如何使用JVisualVM进行性能分析
- JAVA的面向对象编程--------课堂笔记
- 玩玩负载均衡---在window与linux下配置nginx
- C++中的函数指针和函数对象总结
- NSDateFormatter美国时间格式转换
- 一起学Hive系列文章