题目链接:http://poj.org/problem?id=2449

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std; const int maxn = ;
const int maxe = ;
const int INF = 0x3f3f3f3f; struct Edge{
int v,w;
int next;
Edge(int v=,int w=,int next=):
v(v), w(w), next(next){}
};
struct Heap{
int u,f,g;
Heap(int u=,int f=,int g=): u(u), f(f), g(g){}
bool operator < (const Heap& rhs) const{
return f > rhs.f;
}
};
int dist[maxn]; struct Dijkstra{
Edge edges[maxe];
int head[maxn],cnt;
bool vis[maxn]; void init(){
memset(head,-,sizeof(head));
cnt = ;
} void addedge(int u,int v,int w){
edges[cnt] = Edge(v,w,head[u]);
head[u] = cnt++;
} void solve(int s){
memset(vis,,sizeof(vis));
memset(dist,0x3f,sizeof(dist));
priority_queue<Heap> Q;
Q.push(Heap(s,,));
dist[s] = ; while(!Q.empty()){
Heap temp = Q.top(); Q.pop();
int u = temp.u;
int d = temp.f;
if(vis[u]) continue;
vis[u] = true;
for(int i=head[u];i!=-;i=edges[i].next){
Edge& e = edges[i];
if(dist[e.v] > d + e.w){
dist[e.v] = d + e.w;
Q.push(Heap(e.v,dist[e.v],));
}
}
}
}
}solver1; struct A_Star{
Edge edges[maxe];
int head[maxn],cnt;
int num[maxn]; void init(){
memset(head,-,sizeof(head));
cnt = ;
} void addedge(int u,int v,int w){
edges[cnt] = Edge(v,w,head[u]);
head[u] = cnt++;
} int solve(int s,int t,int k){
memset(num,,sizeof(num));
priority_queue<Heap> Q;
if(dist[s] >= INF) return -;
Q.push(Heap(s,dist[s],)); while(!Q.empty()){
Heap temp = Q.top(); Q.pop();
int u = temp.u;
num[u]++;
if(num[t] == k){
return temp.f;
}
if(num[u] > k){
continue;
}
for(int i=head[u];i!=-;i=edges[i].next){
Edge& e = edges[i];
int g = temp.g + e.w;
int f = g + dist[e.v];
Q.push(Heap(e.v,f,g));
}
}
return -;
}
}solver2; int main()
{
//freopen("E:\\acm\\input.txt","r",stdin);
int N,M;
cin>>N>>M;
solver1.init();
solver2.init();
for(int i=;i<=M;i++){
int u,v,w;
scanf("%d %d %d",&u,&v,&w);
solver1.addedge(v,u,w);
solver2.addedge(u,v,w);
}
int s,t,k;
scanf("%d %d %d",&s,&t,&k);
solver1.solve(t);
if(s == t) k++;
int ans = solver2.solve(s,t,k);
printf("%d\n",ans);
}

poj 2449 第k短路的更多相关文章

  1. POJ 2449 第k短路 Dijkstra+A*

    这道题我拖了半年,,,终于写出来了 思路: 先反向建边 从终点做一次最短路 ->这是估价函数h(x) 再正常建边,从起点搜一遍 (priority_queue(h(x)+g(x))) g(x)是 ...

  2. POJ 2449Remmarguts' Date K短路模板 SPFA+A*

    K短路模板,A*+SPFA求K短路.A*中h的求法为在反图中做SPFA,求出到T点的最短路,极为估价函数h(这里不再是估价,而是准确值),然后跑A*,从S点开始(此时为最短路),然后把与S点能达到的点 ...

  3. poj 2499第K短路模板

    第k*短路模板(单项边) #include <iostream> #include <cstdio> #include <algorithm> #include & ...

  4. poj 2449 第k短路径

    思路: 利用一个估计函数g[i]=dis[i]+len.其中len为队列出来的点当前已经走了的距离.dis[i]为该点到终点的最短路径.这样我们只要将点按g[i]的升序在队列你排序,每次取出最小的g[ ...

  5. 【POJ】2449 Remmarguts' Date(k短路)

    http://poj.org/problem?id=2449 不会.. 百度学习.. 恩. k短路不难理解的. 结合了a_star的思想.每动一次进行一次估价,然后找最小的(此时的最短路)然后累计到k ...

  6. poj 2449 Remmarguts' Date K短路+A*

    题目链接:http://poj.org/problem?id=2449 "Good man never makes girls wait or breaks an appointment!& ...

  7. poj 2449(A*求第K短路)

    题目链接:http://poj.org/problem?id=2449 思路:我们可以定义g[x]为源点到当前点的距离,h[x]为当前点到目标节点的最短距离,显然有h[x]<=h*[x](h*[ ...

  8. poj 2449 Remmarguts' Date(第K短路问题 Dijkstra+A*)

    http://poj.org/problem?id=2449 Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Subm ...

  9. POJ 2449 - Remmarguts' Date - [第k短路模板题][优先队列BFS]

    题目链接:http://poj.org/problem?id=2449 Time Limit: 4000MS Memory Limit: 65536K Description "Good m ...

随机推荐

  1. cocos2dx系列笔记(1)- windows环境配置前篇

    cocos2dx升级之旅,请多指教~ 本篇是本人搭建cocos2dx-Windows 64位环境的配置说明,仅供参考. 开发准备 搭建环境肯定需要准备好所有工具,只有把工具都准备好了,才能撸起袖子干活 ...

  2. JS中的 this

    JS中的 this 变化多端,似乎难以捉摸,但实际上对 this 的解读,还是有一定规律的. 分析this,该如何下手呢?下面有一个函数 function show(){ alert(this); } ...

  3. Android 6.0 Permission权限与安全机制

    Marshmallow版本权限修改 android的权限系统一直是首要的安全概念,因为这些权限只在安装的时候被询问一次.一旦安装了,app可以在用户毫不知晓的情况下访问权限内的所有东西,而且一般用户安 ...

  4. PHP 关于 $GLOBALS['HTTP_RAW_POST_DATA']

    PHP 关于 $GLOBALS['HTTP_RAW_POST_DATA'] 最近用微信api写接口时用到了这个,记录,下面转载开始: —————————— 这是手册里写的 总是产生变量包含有原始的 P ...

  5. C#Winform开发平台企业版V4.0功能表

    企业版V4.0 - 功能列表及模板窗体 C/S系统开发框架-企业版 V4.0 (Enterprise Edition) 简介: http://www.csframework.com/cs-framew ...

  6. service httpd restart失败解决方法(小记)

    1.首先查看错误日志 /var/log/message看看具体问题.如果一时难以判定直接使用下面一招 2.直接中断http服务,killall -9 httpd,  然后重启http,service ...

  7. 控制反转(IoC)与依赖注入(DI)

    1.控制反转(Inversion of Control)与依赖注入(Dependency Injection) 控制反转即IoC (Inversion of Control),它把传统上由程序代码直接 ...

  8. Codeforces Round #Pi (Div. 2)

    上次比完赛就准备写了, 结果懒癌发作了, 拖到了现在. Problem_A: 题意: 在一条x轴上有n座城市, 每个城市之间的距离就是它们对应坐标的距离, 现在求出每个城市到其他城市的最近距离和最远距 ...

  9. 一步一步理解 Java 企业级应用的可扩展性

    摘要:本文主要介绍如何理解 Java 应用的扩展方式以及不同类型的扩展技术和具体技巧,介绍一些有关 Java 企业级应用的一般扩展策略. 老实说,"可扩展性"是个全面且详尽的话题, ...

  10. mvn详解

    1.前言 Maven,发音是[`meivin],"专家"的意思.它是一个很好的项目管理工具,很早就进入了我的必备工具行列,但是这次为了把project1项目完全迁移并应用maven ...