SDUT 2894 最短路(SPFA or Bleman)
来源:互联网 发布:汽车销售app软件 编辑:程序博客网 时间:2024/06/05 13:35
C
Time Limit: 7000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给出一个带权无向图,包含n个点,m条边。求出s,e的最短路。保证最短路存在。
输入
多组输入。
对于每组数据。
第一行输入n,m(1<= n && n<=5*10^5,1 <= m && m <= 2*10^6)。
接下来m行,每行三个整数,u,v,w,表示u,v之间有一条权值为w(w >= 0)的边。
最后输入s,e。
接下来m行,每行三个整数,u,v,w,表示u,v之间有一条权值为w(w >= 0)的边。
最后输入s,e。
输出
对于每组数据输出一个整数代表答案。
示例输入
3 11 2 31 2
示例输出
3
点,边都很多,要注意范围,数组开小了,错了好几遍,sad。。。
SPFA
#include <iostream>#include <stdlib.h>#include <queue>#include <cstring>#include <cstdio>using namespace std;const int MAX = 9999999;const int N = 500010;int n,m,cnt;int head[N]; int v[N],b[N];struct node{ int v,w; int next;} q[5000100];void add(int u,int v,int w){ q[cnt].v=v; q[cnt].w=w; q[cnt].next=head[u]; head[u]=cnt++;}void SPFA(int s,int e){ memset(v,MAX,sizeof(v)); memset(b,0,sizeof(b)); b[s]=1; v[s]=0; queue<int >a; a.push(s); while(!a.empty()) { int t=a.front(); a.pop(); b[t]=0; for(int i=head[t]; i!=-1; i=q[i].next) { if(v[q[i].v] > v[t] + q[i].w) { v[q[i].v]=v[t] + q[i].w; if(!b[q[i].v]) { b[q[i].v]=1; a.push(q[i].v); } } } } printf("%d\n",v[e]);}int main(){ while(~scanf("%d%d",&n,&m)) { cnt=0; memset(head,-1,sizeof(head)); for(int i=0; i<m; i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); add(u,v,w); add(v,u,w); } int s,e; scanf("%d%d",&s,&e); SPFA(s,e); } return 0;}
Bellman
#include <iostream>#include <stdlib.h>#include <queue>#include <cstring>#include <cstdio>using namespace std;const int MAX = 9999999;const int N = 500010;int n,m,cnt;int head[N]; int v[N],b[N];struct node{ int u,v,w;}q[5000010];void add(int u,int v,int w){ q[cnt].u=u; q[cnt].v=v; q[cnt++].w=w;}void Bellman(int s,int e){ memset(v,MAX,sizeof(v)); v[s]=0; for(int i=1;i<n;i++) { int flag=1; for(int j=0;j<cnt;j++) { if(v[q[j].v] > v[q[j].u] +q[j].w) { v[q[j].v] = v[q[j].u] +q[j].w; flag=0; } } if(flag) break; } printf("%d\n",v[e]);}int main(){ while(~scanf("%d%d",&n,&m)) { cnt=0; memset(head,-1,sizeof(head)); for(int i=0; i<m; i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); add(u,v,w); add(v,u,w); } int s,e; scanf("%d%d",&s,&e); Bellman(s,e); } return 0;}
0 0
- SDUT 2894 最短路(SPFA or Bleman)
- SDUT 2894-C(最短路spfa)
- SDUT 3562 Proxy【思维+最短路SPFA】
- POJ2502---Subway (最短路:spfa or floyed)
- 最短路(SPFA)
- 最短路 (Spfa)
- HDU 2544 最短路(dijkstra or Floyd or bellman or spfa )
- SDUT 2894 C--最短路
- 最短路算法(SPFA)
- poj3256(SPFA最短路)
- 最短路(SPFA)算法
- 最短路 - spfa - (一)
- SPFA算法 (最短路)
- HDUOJ_2544(最短路)(SPFA)
- hdu1874(最短路spfa)
- hdu4707Pet最短路(spfa)
- 最短路(SPFA算法)
- 最短路(dijkstra、spfa)
- Sqlite 数据库恢复技术,源代码出售
- 机器学习实战之k-近邻算法(5)--- 完整版约会网站数据分类
- WCF-Address
- POJ3046 Ant Counting 【母函数】
- java Reflection 反射
- SDUT 2894 最短路(SPFA or Bleman)
- 风中奇缘
- Ubuntu-安装配置Mysql
- linux操作的常用指令
- 四舍五入精确算法 遇到5(有时)不进位的问题
- cocos2d-js 编译android apk 用cocos Code IDE 还是 cmd命令
- 递归 --与三角数字,阶乘,变位字,汉诺塔问题,递归的二分查找法,归并排序
- apktool
- 异常机制处理:判断系统是否安装了 MS Excel