HN OJ 13375 Flowery Trails (spfa的路径遍历)
来源:互联网 发布:java 线程休眠与唤醒 编辑:程序博客网 时间:2024/05/01 15:12
题意:就是要你求出所有最短路径上的边之和,然后把结果乘以2
思路:spfa上有一个定理:对于给定的一条边,如果从源点到该边起点的最短距离+起点到该边的最短距离+该边的权值=最短距离,那么说明该边是最短路上的边!
转自:http://blog.csdn.net/u012313382/article/details/47400247
#include <cstring> #include <cmath> #include <queue> #include <vector> #include <cstdio> #include <algorithm> using namespace std; typedef long long ll; const int maxn = 10005; const int maxm = 600000; const int INF = 0x3f3f3f3f; int n, m; struct ee{ int to; int nxt; int w; }edge[maxm]; int head[maxn], tol; void init(){ memset(head, -1, sizeof head ); tol = 0; } void add(int u, int v, int w){ edge[tol].to = v; edge[tol].w = w; edge[tol].nxt = head[u]; head[u] = tol++; } int d1[maxn], d2[maxn]; bool vis[maxn]; void spfa(int s, int t, int d[]) { for(int i=0; i<n; ++i) d[i] = INF; memset(vis, false, sizeof vis ); queue<int> q; q.push(s); d[s] = 0; vis[s] = true; while(!q.empty()){ int u = q.front(); q.pop(); vis[u] = false; for(int i=head[u]; ~i; i=edge[i].nxt){ int &v = edge[i].to; int &cost = edge[i].w; if(d[v] > d[u] + cost){ d[v] = d[u] + cost; if(!vis[v]){ vis[v] = true; q.push(v); } } } } } void solve() { int s = 0, t = n-1; spfa(s, t, d1); spfa(t, s, d2); ll ans = 0; int minn = d1[t]; for(int u=0;u<n;u++) { for(int i=head[u];~i;i=edge[i].nxt) { int &v=edge[i].to; int &cost=edge[i].w; if(d1[u]+d2[v]+cost==minn) { ans+=cost; } } } printf("%I64d\n", ans*2); } int main(){ int u, v, l; while(~scanf("%d%d", &n, &m)) { init(); for(int i=0; i<m; ++i){ scanf("%d%d%d", &u, &v, &l); add(u, v, l); add(v, u, l); } solve(); } return 0; }
0 0
- HN OJ 13375 Flowery Trails (spfa的路径遍历)
- HN OJ 13375 Flowery Trails (spfa的路径遍历)
- hnuoj 13375 Flowery Trails(SPFA)
- hduoj 13375 Flowery Trails
- HNU 13375 Flowery Trails (最短路)
- Flowery Trails SWERC B
- uvalive 6886 Flowery Trails fft
- Flowery Trails 多条最短路边长之和
- UVa 12878 - Flowery Trails(最短路应用)
- AOE网上的关键路径【OJ--2498】【SPFA】
- 单源最短路径的SPFA算法
- Dijkstra?+spfa+路径的记录
- OJ:马的遍历
- WUST OJ:2058: 划水的魅力(spfa)
- HN有一个奇葩的性能问题
- SPFA:改进的BellmanFord求单源最短路径算法
- 最短路径的SPFA算法
- 图的单源最短路径SPFA算法
- iOS学习笔记-Objective-C-继承和实例化、对象初始化
- POJ3273--Monthly Expense
- java反射机制功能之---检查类的结构
- acm p1753 小明 A+B
- Java- 构造方法的执行顺序
- HN OJ 13375 Flowery Trails (spfa的路径遍历)
- c的rand()函数,相同的种子,windows和android下产生的随机数列不一样
- 华为OJ(计算字符串的距离)
- Mysql net start mysql启动,提示发生系统错误 5 拒绝访问 解决之道
- Valid Anagram
- Objective_C内存管理_note
- Linux权限引发的"血案"
- 安卓常见错误界面不显示
- javascript之函数表达