【poj2449】 Remmarguts' Date
http://poj.org/problem?id=2449 (题目链接)
题意
求有向图K短路。
Solution
A*。g(x)为当前节点到起点的步数,h(x)为当前节点到终点的最短距离(也就是估价函数)。
细节
dijkstra求终点到各点最短路时要把边反向。原来起点和终点可以是同一个点,坑死了。。。
代码
// poj2499
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=100010;
struct edge {int to,next,w;}e[maxn<<1];
int head[maxn],cnts[maxn],dis[maxn],vis[maxn];
int n,m,S,T,K,cnt,U[maxn],V[maxn],W[maxn]; struct data {
int num,w;
friend bool operator < (const data a,const data b) {
return a.w>b.w;
}
};
struct node {
int num,g,h;
friend bool operator < (const node a,const node b) {
return a.g+a.h>b.g+b.h;
}
};
void link(int u,int v,int w) {
e[++cnt]=(edge){v,head[u],w};head[u]=cnt;
}
void Dijkstra() {
for (int i=1;i<=n;i++) dis[i]=inf;dis[T]=0;
priority_queue<data> q;
data x=(data){T,0};q.push(x);
while (!q.empty()) {
x=q.top();q.pop();
if (vis[x.num]) continue;
vis[x.num]=1;
for (int i=head[x.num];i;i=e[i].next) if (dis[e[i].to]>x.w+e[i].w) {
dis[e[i].to]=e[i].w+x.w;
q.push((data){e[i].to,dis[e[i].to]});
}
}
}
int Astar() {
node x=(node){S,0,dis[S]};
priority_queue<node> q;q.push(x);
while (!q.empty()) {
x=q.top();q.pop();
cnts[x.num]++;
if (cnts[x.num]>K) continue;
if (cnts[T]==K) return x.g;
for (int i=head[x.num];i;i=e[i].next) q.push((node){e[i].to,x.g+e[i].w,dis[e[i].to]});
}
return -1;
}
int main() {
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++) {
scanf("%d%d%d",&U[i],&V[i],&W[i]);
link(V[i],U[i],W[i]);
}
scanf("%d%d%d",&S,&T,&K);
if (S==T) K++;
Dijkstra();
memset(head,0,sizeof(head));cnt=0;
for (int i=1;i<=m;i++) link(U[i],V[i],W[i]);
int ans=Astar();
printf("%d",ans);
return 0;
}
【poj2449】 Remmarguts' Date的更多相关文章
- 【POJ】【2449】Remmarguts' Date
K短路/A* 经(luo)典(ti) K短路题目= = K短路学习:http://www.cnblogs.com/Hilda/p/3226692.html 流程: 先把所有边逆向,做一遍dijkstr ...
- 【POJ 2449】 Remmarguts' Date
[题目链接] http://poj.org/problem?id=2449 [算法] A*(启发式搜索) 首先,求第k短路可以用优先队列BFS实现,当T第k次入队时,就求得了第k短路,但是,这种做法的 ...
- 【转】PHP date("Y-m-d H:i:s");获取当前时间 差8小时解决办法
原因: 网络资 ...
- 【转】lua Date和Time
time和date两个函数在Lua中实现所有的时钟查询功能.函数time在没有参数时返回当前时钟的数值.(在许多系统中该数值是当前距离某个特定时间的秒数.)当为函数调用附加一个特殊的时间表时,该函数就 ...
- 【Web】java date 到 Oracle date 精确到时分秒
有两种方法: java.util.Date startTime=new Date("2014/01/01 23:00:00"); 1.new Timestamp(startTime ...
- 【转】String Date Calendar之间的转换
1.Calendar 转化 String Calendar calendat = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDa ...
- 【转】shell:date 常用方式
在linux下获取时间字符串 命令 date # 以yyyymmdd格式输出23天之前现在这个时刻的时间 $ date +%Y%m%d –date=’23 days ago’ $ date -u Th ...
- 【Java】【9】String Date Calendar之间的转换
前言: 1, Calendar 转化 String 2, Calendar 转化 Date 3,Date 转化 String 4,Date 转化 Calendar 5,String 转化 Calend ...
- 【java】new Date什么样
Thu Nov 21 10:39:40 GMT+08:00 2019 getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31).getDay() 从 Date 对象返回一周中的某一 ...
随机推荐
- C语言关于利用sscanf实现字符串相加减
#include<stdio.h>#include<string.h>void main(){ int a; int b; char str1[10] = "9999 ...
- ToolBar和DrawerLayout的使用实现侧拉栏抽屉的开闭
1.如图可以看到textColorPrimary,colorPrimary,colorPrimaryDark,navigationBarColor等颜色属性代表的相应位置,如下图 2.具体属性在res ...
- JVM-操作码助记符
整理如下,用于以后查找: Opcode Mnemonics Note Constants 0x00 nop 无动作 0x01 aconst_null 把 null 推到操作数栈 0x02 iconst ...
- curl操作CouchDB
couchdb 服务器地址: 127.0.0.1 端口:5984 添加数据库 连接到couchdb curl -X GET http://127.0.0.1:5984 {"couchdb&q ...
- Linux启动报错missing operating system
用UltraISO制作了一个Red Hat Enterprise Linux Server release 5.7系统的U盘启动盘,然后在一台PC上安装,由于安装过程中在干别的事情,有些选项没有细看. ...
- 不同环境下文件上传Uncaught SyntaxError: Unexpected end of input
很奇怪的问题,相同的代码和相同的数据,在两台linux服务器上执行文件上传,一台正常上传,一台在ftl页面 报:Uncaught SyntaxError: Unexpected end of inpu ...
- C#--属性详解
本章讨论属性,它允许源代码用简化语法来调用方法.CLR支持两种属性:无参属性 有参属性.在C#中称有参属性为索引器 无参属性 面向对象设计和编程的重要原则之一就是数据封装,意味着类型的字段永远不应该公 ...
- OAF messageChoice 关联问题
最近有个需求,就是采购订单的供应商要按照一级和二级来选,一级关联二级,二级关联供应商.之前的一级和二级都是用LovInput做的,现在想要改为messageChoice.如下图: 改为: 下面给大家介 ...
- PostgreSQL-constraint
CREATE TABLE语法CREATE [[ GLOBAL | LOCAL ]{ TEMPORARY | TEMP }] TABLE table_name ({ column_name data_t ...
- Linux可插拔认证模块(PAM)的配置文件、工作原理与流程
PAM的配置文件: 我们注意到,配置文件也放在了在应用接口层中,他与PAM API配合使用,从而达到了在应用中灵活插入所需鉴别模块的目的.他的作用主要是为应用选定具体的鉴别模块,模块间的组合以及规定模 ...