题目大意:来自n个农场的n头牛去一个给定的x农场吃草,来回都走最短路,这几个牛所走过的最大的路是多少。
算法思想:spfa的应用,对每头牛去的时候搞一次spfa,回来的时候在搞一次spfa,再将这两段距离之和相加。最后在维护一下最大值输出即可。
如果不大清楚spfa算法,可以参考下http://huyifan951124.iteye.com/blog/2315252
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; #define INF -0x3f3f3f3f #define INF2 0x3f3f3f3f int n, m, x; int a,b,c,e,Max,flag,flag2; typedef struct Edge { int u; int v; int c; }; Edge edges[200050]; int next[200050],head[1005],dist[1005]; bool visited[1005]; void addnode(int u,int v,int c) { edges[e].u=u; edges[e].v=v; edges[e].c=c; next[e]=head[u]; head[u]=e++; } bool relax(int u,int v,int c) { if(dist[v]>dist[u]+c) { dist[v]=dist[u]+c; return true; } return false; } int spfa(int src,int x) { memset(visited,false,sizeof(visited)); for(int i=1;i<=n;i++) { dist[i]=INF2; } dist[src]=0; queue<int>que; que.push(src); visited[src]=true; while(!que.empty()) { int q=que.front(); que.pop(); visited[q]=false; for(int i=head[q];i+1;i=next[i]) { if(relax(q,edges[i].v,edges[i].c)&&!visited[edges[i].v]) { visited[edges[i].v]=true; que.push(edges[i].v); } } } return dist[x]; } int main() { memset(head,-1,sizeof(head)); memset(next,-1,sizeof(next)); scanf("%d%d%d",&n,&m,&x); e=1;Max=INF; for(int i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); addnode(a,b,c); } for(int i=1;i<=n;i++) { flag=-1; if(i==x) continue; flag=spfa(i,x); flag2=spfa(x,i); if(Max<(flag2+flag)) Max=flag2+flag; } printf("%d\n",Max); return 0; }
相关推荐
SPFA算法的核心优化在于,它只对那些在上一次松弛操作中导致距离估计值改变的顶点进行处理。初始时,源点入队,然后在每次迭代中,取出队首的顶点,对其邻接点进行松弛操作。如果某个邻接点的路径被缩短,且该邻接点...
6. Small Label First 优化:该优化是指在SPFA算法中,优先选择小的距离标号,以提高算法的效率。 7. 多路增广:该概念是指在计算最大流时,使用多条路径来增广流量,以提高算法的效率。 8. Dijkstra 算法:该算法...
- **解题思路:** 通过Bellman-Ford或SPFA算法求解单源最短路径问题,并在此基础上通过额外条件筛选出最优解。 - **注意事项:** Bellman-Ford算法可以处理含有负权边的情况,而SPFA算法则在处理大规模图时具有更好...
根据提供的文件信息,本文将对其中提及的几个POJ(Peking University Judge Online)平台上的图论题目进行详细的解析,并介绍解决这些问题时所使用的算法和技术。这些题目涵盖了图论中的多个核心概念,如最短路径、...
在寻找K短路时,先反向运行SPFA算法计算汇点到所有点的最短距离作为h(x),然后在A*搜索中直接入队,当节点入队次数等于K时得到结果。 POJ3463同样是一个中等难度的题目,情况更为复杂。如果源点S到汇点T的次短路径...
KM算法的时间复杂度为O(N^3),对于较小规模的问题,它的效率往往优于基于SPFA的费用流算法,后者的时间复杂度在O(N*E^2)到O(N^2*E)之间,对于稠密图来说可能效率较低。 在POJ3686题目中,问题转变为优化订单完成...
- **解法**:通常采用参数搜索(二分查找)结合最短路径算法(Bellman-Ford或SPFA)。 6. **POJ3635 fulltank?** - **题意**:这是一个最短路径问题的变种。 - **解法**:可以使用广度优先搜索(BFS)来解决。 ...
显示了实际的编程练习题目,比如"UVA-11624失败.cpp"和"POJ-1511-Invitation-Cards.cpp"等,这些文件可能对应着特定的ACM竞赛题目,通过查看和分析这些源代码,可以学习到如何应用上述算法来解决具体问题,例如优化...
* 图论:使用优先队列优化 Dijkstra 和 Prim、单源最短路径之 SPFA、差分约束系统、多源多点最短路径之 FloydWarshall 算法、求欧拉路 * 模拟题训练:进行复杂模拟题训练 * 拓扑排序 * 动态规划进阶:完全背包、多重...
- 辅助算法,如广度优先搜索(BFS)、最短路径算法SPFA等。 - 实现循环队列时应避免使用取模运算,以免影响性能。 ##### 3. 双端队列 - **定义**:双端队列是一种可以在两端进行插入和删除操作的数据结构。 - **...
【差分约束系统】是一种用于解决一系列线性不等式约束问题的模型,常用于最优化问题,如求解最短路径、...在解决具体问题时,理解Dist数组的含义,正确构建边,以及选择合适的最短路径算法(如SPFA)是解决问题的关键。
2.3 扩展欧几里得算法(求 ax+by=gcd 的解以及逆元) . . . . . . . . . . . . . . . 27 2.4 求逆元 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.4.1 扩展欧几里德法 ...