poj 2449 第k短路
题目链接: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短路的更多相关文章
- POJ 2449 第k短路 Dijkstra+A*
这道题我拖了半年,,,终于写出来了 思路: 先反向建边 从终点做一次最短路 ->这是估价函数h(x) 再正常建边,从起点搜一遍 (priority_queue(h(x)+g(x))) g(x)是 ...
- POJ 2449Remmarguts' Date K短路模板 SPFA+A*
K短路模板,A*+SPFA求K短路.A*中h的求法为在反图中做SPFA,求出到T点的最短路,极为估价函数h(这里不再是估价,而是准确值),然后跑A*,从S点开始(此时为最短路),然后把与S点能达到的点 ...
- poj 2499第K短路模板
第k*短路模板(单项边) #include <iostream> #include <cstdio> #include <algorithm> #include & ...
- poj 2449 第k短路径
思路: 利用一个估计函数g[i]=dis[i]+len.其中len为队列出来的点当前已经走了的距离.dis[i]为该点到终点的最短路径.这样我们只要将点按g[i]的升序在队列你排序,每次取出最小的g[ ...
- 【POJ】2449 Remmarguts' Date(k短路)
http://poj.org/problem?id=2449 不会.. 百度学习.. 恩. k短路不难理解的. 结合了a_star的思想.每动一次进行一次估价,然后找最小的(此时的最短路)然后累计到k ...
- poj 2449 Remmarguts' Date K短路+A*
题目链接:http://poj.org/problem?id=2449 "Good man never makes girls wait or breaks an appointment!& ...
- poj 2449(A*求第K短路)
题目链接:http://poj.org/problem?id=2449 思路:我们可以定义g[x]为源点到当前点的距离,h[x]为当前点到目标节点的最短距离,显然有h[x]<=h*[x](h*[ ...
- poj 2449 Remmarguts' Date(第K短路问题 Dijkstra+A*)
http://poj.org/problem?id=2449 Remmarguts' Date Time Limit: 4000MS Memory Limit: 65536K Total Subm ...
- POJ 2449 - Remmarguts' Date - [第k短路模板题][优先队列BFS]
题目链接:http://poj.org/problem?id=2449 Time Limit: 4000MS Memory Limit: 65536K Description "Good m ...
随机推荐
- while循环的跳出
今天在编码时突然产生一个疑问:程序中有一个while循环,循环体执行的是某个附带条件限制的操作.我现在想达到的目的是 => 条件成立,就执行操作,并跳出循环:条件不成立就跳出当次的while循环 ...
- 配置wamp开发环境【2】 配置wamp开发环境之mysql的配置
此前我已经将wamp配置的Apache.PHP.phpmyadmin全部配置完成,以上三种配置参照 配置wamp开发环境 下面我们来看看mysql的配置,这里用的是mysql5.5.20,下载地址: ...
- 【BZOJ3456】【CDQ分治+FNT】城市规划
试题来源 2013中国国家集训队第二次作业 问题描述 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得 ...
- 【清橙A1094】【牛顿迭代法】牛顿迭代法求方程的根
问题描述 给定三次函数f(x)=ax3+bx2+cx+d的4个系数a,b,c,d,以及一个数z,请用牛顿迭代法求出函数f(x)=0在z附近的根,并给出迭代所需要次数. 牛顿迭代法的原理如下(参考下图) ...
- php 连接mysql数据库并显示数据 实例 转载
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- c、c++混编实现查询本地IP地址
一.思路 1.要想得到本地IP地址,可以通过本机名来查询,所以首先得得到本机名. 2.牵涉到IP地址,首先想到牵涉到网络协议,因此得加载套接字协议,所以先使用WSAStartup函数完成对Winsoc ...
- Android App的生命周期是什么
怎么说呢 看Android一般指的是 Activity的生命周期, 关于app的生命周期, 有明白的大神请告诉我 上面这张图是 网上搜到的一张关于app生命周期的图, 在我看来, 其实就是一个Acti ...
- RegularExpressionValidator 常用
RegularExpressionValidator 控件用于验证输入值是否匹配正则表达式指定的模式 属性: ControlToValidate="要验证的控件名称" Valida ...
- Word神器使用
调整自动换行符的换行起始点: 拖拽下面的三角部分(三角下面的四边形部分不要碰),就可以调整自动编号的换行后的其实点在哪里.
- Table view 备忘
Table view 备忘 本篇会以备忘为主,主要是一些基础的代理方法和数据源方法具体的优化好点子会后续跟上. Table view的数据源方法 必须实现的数据源方法 // 返回每一行的cell,可以 ...