判断第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短路-启发式搜索的更多相关文章

  1. Remmarguts' Date POJ - 2449 (A*搜索|k短路)

    "Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. ...

  2. 数据结构&图论:K短路-可持久化可并堆

    本来A*就可以搞定的题,为了怕以后卡复杂度,找了个这么个方法 现阶段水平不够就不补充算法分析部分了 对于图G,建立一个以终点t为起点的最短路径构成的最短路径树 (就是反着跑一遍最短路,然后对于一个不为 ...

  3. POJ 2449 Dijstra + A* K短路

    这题一开始的思路应该是直接从源点进行BFS搜索K短路. 但这样的复杂度在点数和K的值增大后将会变得很大. 而A*算法则构造一个h(x),在进行BFS时,每次都抛出最小的h(x)从而使汇点的出队速度加快 ...

  4. 【10.9校内练习赛】【搜索】【2-sat】【树链剖分】【A_star k短路】【差分约束+判负环】

    在洛谷上复制的题目! P3154 [CQOI2009]循环赛 题目描述 n队伍比赛,每两支队伍比赛一次,平1胜3负0. 给出队伍的最终得分,求多少种可能的分数表. 输入输出格式 输入格式: 第一行包含 ...

  5. 多源第k短路 (ford + 重新定义编号) / 出发点、终点确定的第k短路 (Spfa+ 启发搜索)

    第k短路 Description 一天,HighLights实在是闲的不行,他选取了n个地点,n各地点之间共有m条路径,他想找到这m条路径组成的第k短路,你能帮助他嘛? Input 第一行三个正整数, ...

  6. 与图论的邂逅07:K短路

    在做最短路的题时我们不免会碰到许多求次短路的题,然而我们也能很快地想到解决的办法: 用dijkstra跑一遍最短路,当终点第二次被取出时就是次短路了.时间复杂度为O((N+M)logN).实际上前面得 ...

  7. 图论(A*算法,K短路) :POJ 2449 Remmarguts' Date

    Remmarguts' Date Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 25216   Accepted: 6882 ...

  8. WC2015 k小割(k短路+暴力+搜索)

    首先这道题不是非同一般的恶心,三个数据层次对应三个程序= = PROBLEM:http://uoj.ac/problems解法: 1~2直接暴力枚举边的选择与否+判断就行了 7~14可以发现是一个平面 ...

  9. 【模板篇】k短路 SDOI2010 魔法猪学院

    题目传送门 吐槽时间 题目分析 代码 题目の传送门 都成了一道模板题了OvO ============================================================= ...

随机推荐

  1. 王者荣耀交流协会 - 第7次Scrum会议(第二周)

    1.例会照片 照片由王超(本人)拍摄,组内成员刘耀泽,高远博,王磊,王玉玲,王超,任思佳,袁玥全部到齐. 2.时间跨度: 2017年10月26日 17:05 — 17:47 ,总计42分钟. 3.地 ...

  2. JDK,JRE,JVM之间的关系

    JDK包括JRE包括JVM http://java-mzd.iteye.com/blog/838514

  3. Mac安装jee开发环境,webservice环境搭建

    一.下载安装包 jdk(去官网下载) eclipse (去官网下载) tomcat(官网有9.0了)http://tomcat.apache.org/download-80.cgi#8.0.32 下载 ...

  4. 强化学习之QLearning

    注:以下第一段代码是 文章 提供的代码,但是简书的代码粘贴下来不换行,所以我在这里贴了一遍.其原理在原文中也说得很明白了. 算个旅行商问题 基本介绍 戳 代码解释与来源 代码整个计算过程使用的以下公式 ...

  5. 关于C语言的问卷调查!!!!!!!!!!

    1.我对自己的未来是现在通过大学这一平台逐渐接触社会,通过大学的这段时间学习C语言等计算机语言技术,有一技之长在手,并且通过大学时间丰富自己的业余生活,加强自己的人脉关系,为未来在事业上的发展做准备! ...

  6. lintcode-411-格雷编码

    411-格雷编码 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个二进制的差异. 给定一个非负整数 n ,表示该代码中所有二进制的总数,请找出其格雷编码顺序.一个格雷编码顺序必须以 0 ...

  7. lintcode-205-区间最小数

    205-区间最小数 给定一个整数数组(下标由 0 到 n-1,其中 n 表示数组的规模),以及一个查询列表.每一个查询列表有两个整数 [start, end]. 对于每个查询,计算出数组中从下标 st ...

  8. mui.ajax与服务器(SpringMVC)传输json数据

    跨域问题 PC端为了安全,所以禁止跨域.而我使用mui做移动web时,难免会使用pc浏览器进行调试.mui.ajax是允许跨域的.为了可以调试成功,需要对浏览器进行设置及.以360急速浏览器为例,设置 ...

  9. 安恒杯-babysql

    1. 库名 ?id= and extractvalue(,(select group_concat(0x3a,schema_name) from information_schema.schemata ...

  10. ios 中不new Date 的格式 不支持年月日 以‘-’ 分割的格式

    new Date("2018-1-5") 在 ios 中显示 invalid date - 换做 / 则可以顺利显示 new Date("2018/1/5")