poj2449第K小路径问题
| Time Limit: 4000MS | Memory Limit: 65536K | |
| Total Submissions: 30017 | Accepted: 8159 |
Description
"Prince Remmarguts lives in his kingdom UDF – United Delta of Freedom. One day their neighboring country sent them Princess Uyuw on a diplomatic mission."
"Erenow, the princess sent Remmarguts a letter, informing him that she would come to the hall and hold commercial talks with UDF if and only if the prince go and meet her via the K-th shortest path. (in fact, Uyuw does not want to come at all)"
Being interested in the trade development and such a lovely girl, Prince Remmarguts really became enamored. He needs you - the prime minister's help!
DETAILS: UDF's capital consists of N stations. The hall is numbered S, while the station numbered T denotes prince' current place. M muddy directed sideways connect some of the stations. Remmarguts' path to welcome the princess might include the same station twice or more than twice, even it is the station with number S or T. Different paths with same length will be considered disparate.
Input
The last line consists of three integer numbers S, T and K (1 <= S, T <= N, 1 <= K <= 1000).
Output
Sample Input
2 2
1 2 5
2 1 4
1 2 2
Sample Output
14 A* + 最短路
http://blog.csdn.net/b2b160/article/details/4057781 贴个网站 A*算法详解
估价函数 = 当前值+当前位置到终点的距离
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N= ;
const int M= ;
const int INF=0x3f3f3f3f;
int tot,head[N],re[N],d[N],st,ed,k;
bool vis[N];
struct nnn{
int to,next,w;
}e[M],e1[M];
void add(int u,int v,int w){
e[tot].to=v;
e[tot].next=head[u];
e[tot].w=w;
head[u]=tot;
e1[tot].to=u;
e1[tot].next=re[v];
e1[tot].w=w;
re[v]=tot++;
}
struct node{
int f,u,g;
bool operator <(const node &A)const{
return A.f<f;
}
};
void pre(){
d[ed]=;
memset(vis,,sizeof(vis));
memset(d,INF,sizeof(d));
queue<int>Q;
Q.push(ed);
d[ed]=;
while(!Q.empty()){
int u=Q.front();
Q.pop();
vis[u]=;
for(int i=re[u];i+;i=e1[i].next){
int v=e1[i].to;
if(d[v]>d[u]+e1[i].w){
d[v]=d[u]+e1[i].w;
if(!vis[v]) {
Q.push(v);
vis[v]=;
}
}
}
}
}
int slove(){
int cont=;
memset(vis,,sizeof(vis));
priority_queue<node>Q;
node p,q;
p.f=d[st],p.u=st,p.g=;
Q.push(p);
if(p.f==INF) return -;
while(!Q.empty()){
p=Q.top();
Q.pop();
if(p.u==ed){
++cont;
if(cont==k) return p.g;
}
for(int i=head[p.u];i+;i=e[i].next){
int v=e[i].to;
q.u=v;q.g=p.g+e[i].w;q.f=q.g+d[v];
Q.push(q);
}
}
return -;
}
int main(){
int n,m,u,v,w;
while(scanf("%d%d",&n,&m)!=EOF){
tot=;
memset(head,-,sizeof(head));
memset(re,-,sizeof(re));
while(m--){
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
}
scanf("%d%d%d",&st,&ed,&k);
pre();
if(st==ed) ++k;
printf("%d\n",slove());
}
}
poj2449第K小路径问题的更多相关文章
- SPOJ-COT-Count on a tree(树上路径第K小,可持久化线段树)
题意: 求树上A,B两点路径上第K小的数 分析: 同样是可持久化线段树,只是这一次我们用它来维护树上的信息. 我们之前已经知道,可持久化线段树实际上是维护的一个前缀和,而前缀和不一定要出现在一个线性表 ...
- Count on a tree(树上路径第K小)
题目链接:https://www.spoj.com/problems/COT/en/ 题意:求树上A,B两点路径上第K小的数 思路:主席树实际上是维护的一个前缀和,而前缀和不一定要出现在一个线性表上. ...
- SPOJ 10628 求树上的某条路径上第k小的点
第k小,很容易会想到用主席树来解决 这里简单想一下树的转移过程 因为本身无向图形成一棵树,那么我们总以1为根,那么之后连下去的边对应的点建立的线段树总是在父亲节点对应的树上加上一个当前点对应位置出现的 ...
- 树上第k小,可持久化线段树+倍增lca
给定一颗树,树的每个结点都有权值, 有q个询问,每个询问是 u v k ,表示u到v路径上第k小的权值是多少. 每个结点所表示的线段树,是父亲结点的线段树添加该结点的权值之后形成的新的线段树 c[ro ...
- 主席树总结(经典区间第k小问题)(主席树,线段树)
接着上一篇总结--可持久化线段树来整理吧.点击进入 这两种数据结构确实有异曲同工之妙.结构是很相似的,但维护的主要内容并不相同,主席树的离散化.前缀和等思想也要更难理解一些. 闲话 话说刚学习主席树的 ...
- [BZ4923][Lydsy1706月赛]K小值查询
K小值查询 题面 维护一个长度为n的正整数序列a_1,a_2,...,a_n,支持以下两种操作: 1 k,将序列a从小到大排序,输出a_k的值. 2 k,将所有严格大于k的数a_i减去k. Input ...
- SPOJ COT Count on a tree(树上主席树 + LCA 求点第k小)题解
题意:n个点的树,每个点有权值,问你u~v路径第k小的点的权值是? 思路: 树上主席树就是每个点建一棵权值线段树,具体看JQ博客,LCA用倍增logn求出,具体原理看这里 树上主席树我每个点的存的是点 ...
- POJ 2449 Remmarguts' Date (第k短路径)
Remmarguts' Date Time Limit: 4000MS Memory Limit: 65536K Total Submissions:35025 Accepted: 9467 ...
- spoj COT - Count on a tree (树上第K小 LCA+主席树)
链接: https://www.spoj.com/problems/COT/en/ 思路: 首先看到求两点之前的第k小很容易想到用主席树去写,但是主席树处理的是线性结构,而这道题要求的是树形结构,我们 ...
随机推荐
- 【Linux常见命令】mv命令
mv - move (rename) files mv命令用来为文件或目录改名.或将文件或目录移入其它位置. 语法: mv [OPTION]... [-T] SOURCE DEST mv [OPTIO ...
- asp.net下载大文件代码
public void Down(string filepath, HttpResponse aResponse) { System.IO.Stream iStream = null; // Buff ...
- WebRTC 及点对点网络通信机制
原文请查阅这里,略有删减,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland. 这是 JavaScript 工作原理第十八章. 概述 何为 WebRTC ?首先,字面上已经给出了关于 ...
- .html文件转换成.txt
@ 思路 @-@ 简要 根据尖括号将文件分隔成字符串,建立一套判断字符串是否为标签的标准,若不为标签则为文本内容,存入结果文件中: @-@ 详述 0. 建立两个哈希表: 哈希表1 unordere ...
- 斜率dp A - Print Article HDU - 3507
A - Print Article HDU - 3507 今天刚刚学习了一下斜率dp,感觉还ok,主要就是要推这个斜率,然后利用数据结构来优化. 推荐两篇写的比较好的博客,https://www.cn ...
- POI问题总结,关于数字级联及多级级联(三级以上)
目录 最近公司业务需要用到excel,并且要导出模板,今天为止所有的功能都已经实现了,在这里对出现的一些问题做一个总结. 效果图: 这是一个五级联动的数据,其中第一列是数字开头,实现了五级联动 问题1 ...
- salesforce零基础学习(九十七)Event / Task 针对WhoId的浅谈
我们在Sales Cloud中经常会创建顾客,如果针对TO C业务,会启用个人顾客,比如针对车企行业,有一些场景是需要卖给个人的,而不只是企业采购.当通过打电话或者其他的场景有潜在客户并且转换成客户以 ...
- vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
框架介绍 这是一个基于vue.element-ui.iview..netcore3.1 可支持前端.后台动态扩展业务代码快速开发框架. 框架内置定制开发的代码生成器,生成的代码不需要复制也不需要更改, ...
- 【Scala】代码实现Scala的各种模式匹配操作
文章目录 内容匹配 类型匹配 s表达式 case class 样例类 偏函数 内容匹配 import scala.util.Random object TestMatch { def main(arg ...
- 【FreeRTOS学习05】深度解剖FreeRTOSConfig.h实现对系统的自定义剪裁
ROM/RAM太小,因此要对系统进行剪裁: 相关文章 [FreeRTOS实战汇总]小白博主的RTOS学习实战快速进阶之路(持续更新) 文章目录 相关文章 1 系统的剪裁 2 FreeRTOSConfi ...