poj 2499第K短路模板
第k*短路模板(单项边) #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <queue> #define Max 100005 #define inf 1<<28 using namespace std; int S,T,K,n,m; int head[Max],rehead[Max]; int num,renum; int dis[Max]; bool visit[Max]; int ans[Max]; int qe[Max*10]; struct kdq{int v,len,next; } edge[Max],reedge[Max];struct a_star { //A*搜索时的优先级队列;int v;int len;bool operator<(const a_star &a)const{ //f(i)=d[i]+g[i]return len+dis[v]>a.len+dis[a.v];} }; void insert(int u,int v,int len){//正图和逆图edge[num].v=v;edge[num].len=len;edge[num].next=head[u];head[u]=num;num++;reedge[renum].v=u;reedge[renum].len=len;reedge[renum].next=rehead[v];rehead[v]=renum;renum++; }void init(){memset(ans,0,sizeof(ans));for(int i=0; i<=n; i++)head[i]=-1,rehead[i]=-1;num=1,renum=1; } void spfa(){//从T开始求出T到所有点的 dis[]int i,j;for(i=1; i<=n; i++)dis[i]=inf;dis[T]=0;visit[T]=1;int num=0,cnt=0;qe[num++]=T;while(num>cnt){int temp=qe[cnt++];visit[temp]=0;for(i=rehead[temp]; i!=-1 ; i=reedge[i].next){int tt=reedge[i].v;int ttt=reedge[i].len;if(dis[tt]>dis[temp]+ttt){dis[tt]=dis[temp]+ttt;if(!visit[tt]){qe[num++]=tt;visit[tt]=1;}}}} } int A_star(){if(S==T)K++;if(dis[S]==inf)return -1;a_star n1;n1.v=S;n1.len=0;priority_queue <a_star> q;q.push(n1);while(!q.empty()){a_star temp=q.top();q.pop();ans[temp.v]++;if(ans[T]==K)//当第K次取到T的时候,输出路程return temp.len;if(ans[temp.v]>K)continue;for(int i=head[temp.v]; i!=-1; i=edge[i].next){a_star n2;n2.v=edge[i].v;n2.len=edge[i].len+temp.len;q.push(n2);}}return -1; } int main(){int i,j,k,l;int a,b,s;scanf("%d%d",&n,&m);init();while(m--){scanf("%d%d%d",&a,&b,&s);insert(a,b,s);}scanf("%d%d%d",&S,&T,&K);spfa();printf("%d\n",A_star());return 0; }
转载于:https://www.cnblogs.com/13224ACMer/p/4857567.html
poj 2499第K短路模板相关推荐
- A*算法+最短路实现K短路+模板题
<font color=black size=4>K短路问题还是很普遍的,了解一下K短路很有必要,顺便学会A*的简单应用更好. A*算法,是一种启发式搜索算法,我们可以自己设定一个估价函数 ...
- POJ 2449 Remmarguts' Date(k短路模板)
link:https://vjudge.net/problem/POJ-2449 前面输入与大多最短路题相同 最后一行输入s,t,k 求从s到t的第K短路 wiki link: https://en. ...
- A*算法的认识与求第K短路模板
现在来了解A*算法是什么 现在来解决A*求K短路问题 在一个有权图中,从起点到终点最短的路径成为最短路,第2短的路成为次短路,第3短的路成为第3短路,依此类推,第k短的路成为第k短路.那么,第k短路怎 ...
- poj2449 K短路模板题
昨晚看WC论文发现自己连K短路的经典A*算法还不会,补了一波,模板题输出-1后没return继续跑wa了一早上...... 算法流程: ①在反向图中求出t到每个点的最短路 ②从原点bfs,估价f=d+ ...
- 第K短路模板【POJ2449 / 洛谷2483 / BZOJ1975 / HDU6181】
1.到底如何求k短路的? 我们考虑,要求k短路,要先求出最短路/次短路/第三短路--/第(k-1)短路,然后访问到第k短路. 接下来的方法就是如此操作的. 2.f(x)的意义? 我们得到的f(x)更小 ...
- BZOJ1975 [Sdoi2010]魔法猪学院 k短路
欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1975 题意概括 给出一个无向图,让你走不同的路径,从1到n,路径长度之和不超过E,求最大路径条数. ...
- POJ - 2449 Remmarguts' Date(第k短路:spfa+A*)
题目链接:点击查看 题目大意:给出一个有向图,求第k短路 题目分析:偷学了一波A*,本来以为是多难的算法,其实就是bfs+优先队列的升级版,之前看的那些博客写的都太深奥了,以至于看了一半啥都没看懂然后 ...
- 【学习笔记】左偏树的可持久化(【模板】k短路 / [SDOI2010]魔法猪学院)
文章目录 description solution code [模板]k短路 / [SDOI2010]魔法猪学院 description iPig 在假期来到了传说中的魔法猪学院,开始为期两个月的魔法 ...
- ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven (K短路算法模板)
题意 : 求第k短路的权值是否超过T(权值) 解法: 网上随便找的一个求K短路的算法模板套弄一下即可 (模板要好,不然邻接表存图会TLE , 网上换了两个模板才AC的) AC代码: #include& ...
- POJ 2449 Remmarguts' Date(第K短路 + A* + 最短路)题解
题意:找出第k短路,输出长度,没有输出-1 思路:这题可以用A*做.A*的原理是这样,我们用一个函数:f = g + h 来表示当前点的预期步数,f代表当前点的预期步数,g代表从起点走到当前的步数,h ...
最新文章
- 阿里重金投数梦工场 布局PaaS动了谁的奶酪
- httpClient学习的初步认识
- MySQL的体系结构是C S结构_c/s结构的数据库系统结构是指
- ssl1202-滑雪【记忆化搜索法】
- [css] 有用过Flex吗?简要说下你对它的了解
- 阿里java架构师面试128题含答案:分布式架构+Dubbo+多线程+Redis
- c语言数字和字母输出的,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...
- FileReader详解与实例---读取并显示图像文件 | JS Mix
- 《深入学习 Golang》并发编程
- 如何在MySQL中重置AUTO_INCREMENT?
- YUV 格式与 RGB 格式的相互转换公式总结(C++版)
- mysql -a_a|MySQL基础命令
- 变身mac达人,这几招技巧您有必要了解~
- nfine框架连接oracle,NFine快速开发框架(无后门)
- 关于ORA-00257问题的解决(归档程序错误)
- (二)Excel函数应用之数学和三角函数
- ubuntu 安装 hustoj
- Linux 中文件压缩方法与tar打包详解
- 最新红包抓娃娃源码带教程
- 学计算机U盘内存,用U盘启动盘快速检测电脑内存的详细教程