图论&搜索: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 ============================================================= ...
随机推荐
- 王者荣耀交流协会-Alpha发布用户使用报告
用户数量:10人 姓名如下(包括化名):张小斌.王瑞瑞.蛋蛋.小美.晨曦.小丽.张利刚.小闫.小谢.小崔 寻找的用户多为王者荣耀交流协会成员的同学,对管理时间有着强烈的需求,也对PSP Daily软件 ...
- 冲刺ing-5
第五次Scrum冲刺 队员完成的任务 队员 完成任务 吴伟华 Leangoo的看板截图,燃尽图 蔺皓雯 编写博客 蔡晨旸 测试 曾茜 测试 鲁婧楠 测试 杨池宇 测试 成员遇到的问题 队员 问题 吴伟 ...
- 20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结
20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结 小组成员 20172313 余坤澎 20172332 于欣月 20172326 康皓越 小组编程照片 设计思路 通过一个E ...
- Visual C++ 8.0对象布局
哈哈,从M$ Visual C++ Team的Andy Rich那里又偷学到一招:VC8的隐含编译项/d1reportSingleClassLayout和/d1reportAllClassLayout ...
- 解决Max retries exceeded with url的问题
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='itunes.apple.com', port=443): Max ret ...
- CCF——数列分段201509-1
问题描述 给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段? 输入格式 输入的第一行包含一个整数n,表示数列中整数的个数. 第二行包含n个整数a1, a2, …, an,表示 ...
- 结对项目——fault,error,failure的程序设计
一.结对编程内容: 1.不能触发Fault. 2.触发Fault,但是不触发Error. 3.触发Error,但不触发Failure. 二.结对编程人员 1.周宗耀.周浩: 2.结对截图: 三.结对项 ...
- (十)Jmeter中的Debug Sampler介绍
一.Debug Sampler介绍: 使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug Sampler,它有三个选项:JMeter properties,JMeter v ...
- CentOS 6.5安装配置LAMP服务器(Apache+PHP5+MySQL)
1.配置防火墙,开启80端口.3306端口vi /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dport 8 ...
- js & array to string
js & array to string https://stackoverflow.com/questions/13272406/convert-string-with-commas-to- ...