判断第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. 软件工程团队项目第一个Sprint评论

    (1)跑男:话说我没怎么听懂这个游戏是怎么玩的,可能是由于这是第一组,所以我没有反应过来把,界面设计的还可以,但是像设置,选关,帮助真心没看懂.有一种感觉就是,这个游戏是由一堆的漂亮的图片拼起来的,还 ...

  2. 电梯V2.0

    电梯V2.0 GitHub仓库地址 Problem 一栋10层的大楼(楼层编号1-10),设3台无限载重的电梯,初始时电梯停在1层.其中:1号电梯只能停留在奇数层,2号电梯可以各层都停留,3号电梯只停 ...

  3. WITH HINDSIGHT

    设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们是要做一个基于文件同步展示的语音软件:感谢之前的两次项目审核,我们定义与描述得很清楚: 我们达到目标 ...

  4. HDU 5661 Claris and XOR 贪心

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5661 bc(中文):http://bestcoder.hdu.edu.cn/contests ...

  5. Windows Forms编程实战学习:第三章 菜单

    第三章 菜单 1,控件和容器 所有的Windows Forms控件都是从System.Windows.Forms.Control类继承的,相关类的层次结构如下图所示: MarshalByRefObje ...

  6. JS 中substring() , substr(), slice() 的区别

    substr(start, length) : 截取从start索引开始的字符,长度为length的字符串 substring(start, end) : 截取从start索引开始的字符,以end索引 ...

  7. tftp 简要使用说明

    yum 安装:tftp    tftp-server (2)启动tftp   CentOS 6 service xinetd restart chkconfig tftp on     CentOS ...

  8. 【Nginx】均衡负载权重模式实现session数据同步

    思路:把session存放到一个公共redis服务器上 每次浏览器请求服务端都会带上cookie,因为使用的是权重负载均衡方案,因此nginx反向代理服务器会把请求发放到不同的服务端,服务端用cook ...

  9. vue shorthands

    vue shorthands : & @ https://vuejs.org/v2/guide/syntax.html#Shorthands v-for https://vuejs.org/v ...

  10. HDU4678_Mine

    很有意思,很好的题目. 这样的,一个n*m的扫雷地图,告诉你哪些地方是有雷的.一个人如果点在了空白处,那么与其相邻的(八个方向)的数字以及空白都会递归地显示出来,如果点在数字上面,那么就只会显示这一个 ...