图论&搜索:K短路-启发式搜索
判断第k短路的权值是否小于T
直接把队友的代码拿过来了,一定很经典
#include <iostream>
#include <queue>
#include <cstring>
#include <vector> using namespace std; const int maxn = ;
const int INF = 0x7fffffff;
int N, M, S, E, K, T;
int inq[maxn];
int dis[maxn];
int cnt[maxn]; struct Edge
{
int u, v, w;
Edge(int a, int b, int c):u(a), v(b), w(c){}
}; struct Node
{
int d, v;
Node(int a, int b):d(a), v(b){}
bool operator < (const Node &x) const {return d+dis[v]>x.d+dis[x.v];}
}; struct Node1
{
int d, v;
Node1(int a, int b):d(a), v(b){}
bool operator < (const Node1 &x) const {return d>x.d;}
}; vector<Edge> edge1;
vector<Edge> edge2;
vector<int> G1[maxn];
vector<int> G2[maxn]; inline void addedge(int a, int b, int c)
{
edge1.push_back(Edge(a,b,c));
G1[a].push_back(edge1.size()-);
edge2.push_back(Edge(b,a,c));
G2[b].push_back(edge2.size()-);
} void dijkstra_init()
{
priority_queue<Node1>Q;
memset(inq, , sizeof(inq));
std::fill(dis, dis+maxn, INF);
dis[E] = ;
Q.push(Node1(, E));
while(!Q.empty())
{
auto x = Q.top(); Q.pop();
if(inq[x.v]) continue;
inq[x.v] = true;
for(int i = ; i < G2[x.v].size(); ++i)
{
Edge &m = edge2[G2[x.v][i]];
if(dis[m.v]>dis[m.u]+m.w)
{
dis[m.v] = dis[m.u]+m.w;
Q.push(Node1(dis[m.v], m.v));
}
}
}
} int k_th()
{
memset(cnt, , sizeof(cnt));
priority_queue<Node>Q;
if(dis[S]>=INF) return -;
Node e(, S);
Q.push(e); while(!Q.empty())
{
Node x = Q.top();Q.pop(); cnt[x.v]++; if(x.v == E)
{
if(x.d>T) return -;
if(cnt[x.v] == K) return x.d;
} if (cnt[x.v] > K) continue; for(unsigned int i = ; i < G1[x.v].size(); i++)
{
Node n(x.d+edge1[G1[x.v][i]].w, edge1[G1[x.v][i]].v);
if(cnt[n.v] != K)
Q.push(n);
}
}
return -;
} int main()
{
while(scanf("%d%d", &N, &M) != EOF)
{
edge1.clear();
edge2.clear(); for(int i = ; i < maxn; ++i)
{
G1[i].clear();
G2[i].clear();
} scanf("%d%d%d%d", &S, &E, &K, &T); for(int i = ; i <= M; ++i)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
addedge(a, b, c);
} dijkstra_init(); int ans = k_th(); if(ans <= T && ans != -) printf("yareyaredawa\n");
else printf("Whitesnake!\n");
}
return ;
}
图论&搜索:K短路-启发式搜索的更多相关文章
- Remmarguts' Date POJ - 2449 (A*搜索|k短路)
"Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. ...
- 数据结构&图论:K短路-可持久化可并堆
本来A*就可以搞定的题,为了怕以后卡复杂度,找了个这么个方法 现阶段水平不够就不补充算法分析部分了 对于图G,建立一个以终点t为起点的最短路径构成的最短路径树 (就是反着跑一遍最短路,然后对于一个不为 ...
- POJ 2449 Dijstra + A* K短路
这题一开始的思路应该是直接从源点进行BFS搜索K短路. 但这样的复杂度在点数和K的值增大后将会变得很大. 而A*算法则构造一个h(x),在进行BFS时,每次都抛出最小的h(x)从而使汇点的出队速度加快 ...
- 【10.9校内练习赛】【搜索】【2-sat】【树链剖分】【A_star k短路】【差分约束+判负环】
在洛谷上复制的题目! P3154 [CQOI2009]循环赛 题目描述 n队伍比赛,每两支队伍比赛一次,平1胜3负0. 给出队伍的最终得分,求多少种可能的分数表. 输入输出格式 输入格式: 第一行包含 ...
- 多源第k短路 (ford + 重新定义编号) / 出发点、终点确定的第k短路 (Spfa+ 启发搜索)
第k短路 Description 一天,HighLights实在是闲的不行,他选取了n个地点,n各地点之间共有m条路径,他想找到这m条路径组成的第k短路,你能帮助他嘛? Input 第一行三个正整数, ...
- 与图论的邂逅07:K短路
在做最短路的题时我们不免会碰到许多求次短路的题,然而我们也能很快地想到解决的办法: 用dijkstra跑一遍最短路,当终点第二次被取出时就是次短路了.时间复杂度为O((N+M)logN).实际上前面得 ...
- 图论(A*算法,K短路) :POJ 2449 Remmarguts' Date
Remmarguts' Date Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 25216 Accepted: 6882 ...
- WC2015 k小割(k短路+暴力+搜索)
首先这道题不是非同一般的恶心,三个数据层次对应三个程序= = PROBLEM:http://uoj.ac/problems解法: 1~2直接暴力枚举边的选择与否+判断就行了 7~14可以发现是一个平面 ...
- 【模板篇】k短路 SDOI2010 魔法猪学院
题目传送门 吐槽时间 题目分析 代码 题目の传送门 都成了一道模板题了OvO ============================================================= ...
随机推荐
- 关于window.open弹出窗口被阻止的问题
原文:http://blog.csdn.net/fanfanjin/article/details/6858168 在web编程过程中,经常会遇到一些页面需要弹出窗口,但是在服务器端用window.o ...
- TCP系列41—拥塞控制—4、Linux中的慢启动和拥塞避免(一)
一.Linux中的慢启动和拥塞避免 Linux中采用了Google论文的建议把IW初始化成了10了.在linux中一般有三种场景会触发慢启动过程 1.连接初始建立发送数据的时候,此时cwnd初始化为1 ...
- 【week10】psp
项目 内容 开始时间 结束时间 中断时间 净时间 2016/11/19(星期六) 写博客 吉林一日游规格说明书 10:30 15:10 20 260 2016/11/20(星期日) 看论文 磷酸化+三 ...
- java分页算法
int totalPageNum = (totalRecord + pageSize - 1) / pageSize;
- webgl学习笔记三-平移旋转缩放
写在前面 建议先阅读下前面我的两篇文章. webgl学习笔记一-绘图单点 webgl学习笔记二-绘图多点 平移 1.关键点说明 顶点着色器需要加上 uniform vec4 u_Translation ...
- SQL的拼接语句在DELPHI中怎么写
SQL 语句的拼接,关键点在于对引号的处理上. 在 delphi 的语法中,使用单引号做字符串的标志符.因此,当遇到 SQL 语句中字符串标识量编写的时候,需要用两个单引号来代替实际的引号. 举例: ...
- lock 默认公平锁还是非公平锁?公平锁是如何定义?如何实现
ReentrantLock的实现是基于其内部类FairSync(公平锁)和NonFairSync(非公平锁)实现的. 其可重入性是基于Thread.currentThread()实现的: 如果当前线程 ...
- JMeter脚本强化之检查点
上一篇讲述了对脚本做参数化的两种方法,并对参数化设置结果做了简单的验证,就是通过添加断言.本篇将详细一点介绍怎么使用断言做文本检查,或者叫做设置检查点. 首先来看看下面的三个图,这三个图是用查看结果树 ...
- 第130天:移动端-rem布局
一.关于布局方案 当拿到设计师给的UI设计图,前端的首要任务就是布局和样式,相信这对于大部分前端工程师来说已经不是什么难题了.移动端的布局相对PC较为简单,关键在于对不同设备的适配.之前介绍了一篇关于 ...
- 第99天:CSS3中透视perspective
CSS3中透视perspective 透视原理: 近大远小 . 浏览器透视:把近大远小的所有图像,透视在屏幕上. 理解浏览器的坐标系:浏览器平面为 Z=0的平面,坐标原点默认为图片的中心,可以通过更改 ...