感觉一直写的dij堆优化都是假的,最短路板子spfa+ dij堆优化

SPFA

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<set>
#include<stack>
#include<vector>
#include<map>
#include<queue>
#define myself i,l,r
#define lson i<<1
#define rson i<<1|1
#define Lson i<<1,l,mid
#define Rson i<<1|1,mid+1,r
#define half (l+r)/2
#define inff 0x3f3f3f3f
#define lowbit(x) x&(-x)
#define PI 3.14159265358979323846
#define min4(a,b,c,d) min(min(a,b),min(c,d))
#define min3(x,y,z) min(min(x,y),min(y,z))
#define pii make_pair
#define pr pair<int,int>
const int dir[4][2]={0,1,0,-1,1,0,-1,0};
typedef long long ll;
const ll inFF=9223372036854775807;
typedef unsigned long long ull;
using namespace std;
const int maxn=1e4+5;
int d[maxn],vis[maxn];
int head[maxn],sign;
int n,m;
struct node
{int to,p,val;
}edge[maxn];
void add(int u,int v,int val)
{edge[sign]=node{v,head[u],val};head[u]=sign++;
}
void init()
{sign=0;memset(head,-1,sizeof(head));
}
void spfa()
{for(int i=1;i<=n;i++) d[i]=inff;d[n]=0;queue<int> q;vis[n]=1;q.push(n);while(!q.empty()){int u=q.front();q.pop(),vis[u]=0;for(int i=head[u];~i;i=edge[i].p){int v=edge[i].to;if(d[v]>d[u]+edge[i].val){d[v]=d[u]+edge[i].val;if(!vis[v]){q.push(v);vis[v]=1;}}}}
}
int main()
{int x,y,z;while(cin>>m>>n){init();for(int i=1;i<=m;i++){scanf("%d %d %d",&x,&y,&z);add(x,y,z),add(y,x,z);}spfa();printf("%d\n",d[1]);}return 0;
}

DIJ+优先队列优化

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<set>
#include<stack>
#include<vector>
#include<map>
#include<queue>
#define myself i,l,r
#define lson i<<1
#define rson i<<1|1
#define Lson i<<1,l,mid
#define Rson i<<1|1,mid+1,r
#define half (l+r)/2
#define inff 0x3f3f3f3f
#define lowbit(x) x&(-x)
#define PI 3.14159265358979323846
#define min4(a,b,c,d) min(min(a,b),min(c,d))
#define min3(x,y,z) min(min(x,y),min(y,z))
#define pii make_pair
#define pr pair<int,int>
const int dir[4][2]={0,1,0,-1,1,0,-1,0};
typedef long long ll;
const ll inFF=9223372036854775807;
typedef unsigned long long ull;
using namespace std;
const int maxn=1e4+5;
int d[maxn];
int head[maxn],sign;
int n,m;
struct node
{int to,p,val;
}edge[maxn];
void add(int u,int v,int val)
{edge[sign]=node{v,head[u],val};head[u]=sign++;
}
struct nod
{int u,val;bool friend operator<(nod s,nod e){return s.val>e.val;}
};
void init()
{sign=0;memset(head,-1,sizeof(head));
}
void dij()
{for(int i=1;i<=n;i++) d[i]=inff;d[n]=0;priority_queue<nod> q;q.push(nod{n,0});while(!q.empty()){nod now=q.top();q.pop();if(d[now.u]<now.val) continue;for(int i=head[now.u];~i;i=edge[i].p){int v=edge[i].to;if(d[v]>d[now.u]+edge[i].val){d[v]=d[now.u]+edge[i].val;q.push(nod{v,d[v]});}}}
}
int main()
{int x,y,z;while(cin>>m>>n){init();for(int i=1;i<=m;i++){scanf("%d %d %d",&x,&y,&z);add(x,y,z),add(y,x,z);}dij();printf("%d\n",d[1]);}return 0;
}

POJ - 2387 Til the Cows Come Home相关推荐

  1. POJ 2387 Til the Cows Come Home (最短路径 模版题 三种解法)

    原题链接:Til the Cows Come Home 题目大意:有  个点,给出从  点到  点的距离并且  和  是互相可以抵达的,问从  到  的最短距离. 题目分析:这是一道典型的最短路径模版 ...

  2. Poj 2387 Til the Cows Come Home 迪杰斯特拉(普通+优化)

    Til the Cows Come Home 迪杰斯特拉(普通+优化) 贝西在田里,想在农夫约翰叫醒她早上挤奶之前回到谷仓尽可能多地睡一觉.贝西需要她的美梦,所以她想尽快回来. 农场主约翰的田里有n( ...

  3. POJ 2387 Til the Cows Come Home

    传送门:http://poj.org/problem?id=2387 这是最短路径问题,本题有重边,但是spfa能解决这个问题: 实现代码: SPFA: 1 #include <iostream ...

  4. poj 2387 Til the Cows Come Home dijkstra

    题意: 贝西在田里,想在农夫约翰叫醒她早上挤奶之前回到谷仓尽可能多地睡一觉.贝西需要她的美梦,所以她想尽快回来. 农场主约翰的田里有n(2<=n<=1000)个地标,唯一编号为1-n.地标 ...

  5. 【POJ】2387 Til the Cows Come Home

    题目链接:http://poj.org/problem?id=2387 题意:求从1到n的最短路 题解:板子题.spfa. 代码: 1 #include<iostream> 2 #incl ...

  6. pku 2387 Til the Cows Come Home

    原来一直没去学spfa,感觉只一个Dij已经很够用了,昨天翻了一下最短路,如果路径中存在负权的话,Dij也只能素手无策,这时spfa就大显身手了.. 实现过程: 我们用数组d记录每个结点的最短路径估计 ...

  7. A - Til the Cows Come Home POJ - 2387

    A - Til the Cows Come Home POJ - 2387 最短路 #include<iostream> #include<cstdio> #include&l ...

  8. DIJSPFA-Til the Cows Come Home POJ - 2387

    Til the Cows Come Home POJ - 2387 用dij和spfa写了做个对比,看了一篇很好的文章对这两个算法有了更好的理解**<Dijkstra+heap和SPFA的区别& ...

  9. Til the Cows Come Home(dijkstra)

    题目连接: Til the Cows Come Home 题目: Bessie is out in the field and wants to get back to the barn to get ...

最新文章

  1. Attribute 绑定、类绑定和样式绑定
  2. 加密算法 AES MD5 SHA1
  3. Java开发面试问题,Jsoup解析html
  4. C++:录入班级数学成绩,计算最大值、平均值、不及格人数
  5. c语言判断一个已知的二叉树是否是二叉排序树_10584 二叉树怎样序列化才能重建...
  6. scala版本的springboot的helloworld实验记录(转载+自己验证整理)
  7. [机器学习]一个例子完美解释朴素贝叶斯分类器
  8. linux rpm 校验软件包中的文件
  9. VS2019 更新MSDN并创建快捷方式
  10. 最大的路径的节点值之和
  11. 如何简化React应用程序中的状态-轻松实现Redux
  12. HDU 4597 Play Game (记忆化搜索博弈DP)
  13. 把 mysql sql_mode 设置为严格模式的方法
  14. Java字符串查找第一个不重复字符_java如何实现获取字符串中第一个出现不重复的字符...
  15. 解决管家婆7在SQL2008上安装不了问题
  16. java开发常用排名前16的Java工具类
  17. 怎么给图片批量加边框
  18. 操作系统基础:内存管理逻辑思维导图,简单看懂内存管理的逻辑
  19. 音频隐写术总结篇(附隐写软件下载链接)
  20. 微信小程序开发页面无法显示,未注册报错

热门文章

  1. Ubuntu 修改本地磁盘名称
  2. Android TextView 在strings 里面 实现换行
  3. INSTALL_FAILED_USER_RESTRICTED
  4. jquery 监听的案例
  5. 安卓中运行报错Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决
  6. (循环练习题) 五只猴子分桃子
  7. oracle字符界面安装,怎么解决oracle在linux 纯字符界面安装有关问题
  8. hihocoder offer收割编程练习赛11 B 物品价值
  9. SQL Server(五)——常用函数
  10. 十五个步骤收获学习的习惯